IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Apache Discussion :

Suite d'une réécriture


Sujet :

Apache

  1. #1
    Candidat au Club
    Profil pro
    Inscrit en
    Décembre 2010
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2010
    Messages : 5
    Points : 3
    Points
    3
    Par défaut Suite d'une réécriture
    Bonjour,

    Je viens de réaliser une réécriture d'une url avec paramètres et celle-ci fonctionne.

    Url d'origine : details_produit.php?url=$1&id=$2 (url = nom du produit)
    Url réécrite : nomproduit-id

    fait comme ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    RewriteEngine On
    RewriteCond %{QUERY_STRING} ^url=([^&]*)&id=([^&]*)$
    RewriteRule ^details_produit\.php$ /%1-%2? [R=301,L]
    RewriteRule ^([a-zA-Z0-9-]+)-([0-9]+)$ /details_produit.php?url=$1&id=$2&rewriting [L]
    Le problème est que l'url réécrite dans le navigateur est du style www.ndd.com/nomproduit-id et lorsque je change l'id à la main je change bien de page (donc de produit) mais la première partie nomproduit reste et ne prend pas en compte le nouvel id.
    En clair, je peux mettre n'importe quel id, le nom de produit ne bouge pas !

    Il y a une incidence lorsque je veux réaliser mon sitemap, le logiciel détecte des noms de produits avec des id ne correspondant pas alors que sur mon site, chaque produit appelé à son id correspondant.

    Je suis assez perplexe, y a t'il un moyen de 'synchroniser' nomproduit+id en cas d'intervention 'manuelle' du visiteur avec une modif de la règle d'écriture ?

    Comment faire un sitemap qui soit le reflet exact de ce qui est présent ?

    J'espère que j'ai été suffisamment clair ! En tout cas n'hésitez pas à me poser des questions. Merci d'avance.

  2. #2
    Rédacteur
    Avatar de _Mac_
    Profil pro
    Inscrit en
    Août 2005
    Messages
    9 601
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2005
    Messages : 9 601
    Points : 12 977
    Points
    12 977
    Par défaut
    Le seul moyen simple de synchroniser les deux est de le faire dans le code PHP de details_produit.php : en haut de cette page, tu ajoutes le contrôle et si ce contrôle n'est pas bon, tu rediriges (301) le navigateur vers la bonne URL.

    Je n'ai pas compris comment ton sitemap peut contenir des noms de produits et des ID désynchronisés.

  3. #3
    Candidat au Club
    Profil pro
    Inscrit en
    Décembre 2010
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2010
    Messages : 5
    Points : 3
    Points
    3
    Par défaut
    Citation Envoyé par _Mac_ Voir le message
    Le seul moyen simple de synchroniser les deux est de le faire dans le code PHP de details_produit.php : en haut de cette page, tu ajoutes le contrôle et si ce contrôle n'est pas bon, tu rediriges (301) le navigateur vers la bonne URL.
    Tu peux développer un peu ton idée, s'il te plait ? Tu as un exemple à me montrer ?

    Pour le sitemap, je t'avoue ne pas comprendre non plus...

  4. #4
    Rédacteur
    Avatar de _Mac_
    Profil pro
    Inscrit en
    Août 2005
    Messages
    9 601
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2005
    Messages : 9 601
    Points : 12 977
    Points
    12 977
    Par défaut
    Bah, c'est pas bien compliqué dans le principe :
    Code PHP : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    <?php
    // Parametres de l'URL
    $url = $_GET["url"];
    $id  = $_GET["id"];
     
    // Vraie valeur attendue de URL
    // Comme je ne connais pas ton site, c'est impossible de dire comment recuperer cette vraie valeur. Sûrement en faisant une requete dans une base de donnees.
    $vraie_url = ...;
     
    // On compare
    if ($url != vraie_url) {
        // On redirige
        header("301 Moved Permanently");
        header("Location: /".$vraie_url."-".$id);
    }
    ?>
    Alors évidemment ce code est très mauvais car je ne traite pas le cas où l'ID passé dans l'URL n'existe pas, il faut encoder $vraie_url pour construire l'URL de redirection, etc.

  5. #5
    Candidat au Club
    Profil pro
    Inscrit en
    Décembre 2010
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2010
    Messages : 5
    Points : 3
    Points
    3
    Par défaut Suite...
    J'ai testé la solution proposé avec ceci

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
     
    <?php
    $vraie_url = $_SERVER['REQUEST_URI']; //url afficher par le lien
     
    $url = $toto['nom']; // appel du nom correspondant à l'id
     
    $id = $toto['id'];// appel de l'id correspondant au nom
    $rep = '/beta/'; //répertoire de test
     
    #Mise en forme url
    $urltested = $rep .$url.-$id; // url correspondant à l'id affiché
     
    if ($vraie_url != $urltested) {
        // On redirige
     
            header('301 Moved Permanently', false, 301);
    	header('Location: ' .$urltested); //redirection
    	echo "url rewrité";
     
    }  ?>
    Sous Wamp en local, cela marche bien car si je modifie l'id, le nom associé est rechargé et correspond à présent !

    En ligne cela me plante avec une internal error (erreur 500). Ma page produit lors de l'appel par le lien s'affiche correctement, mais si je modifie l'id (comme en local), j'ai cette erreur 500 !!! (j'ai bien sur viré le répertoire beta)

    Si je supprime la ligne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <?php header('301 Moved Permanently', false, 301);?>
    , apparemment cela se passe bien...

    Une idée de ce qui se passe ?

    Merci pour ta patience.

  6. #6
    Rédacteur
    Avatar de _Mac_
    Profil pro
    Inscrit en
    Août 2005
    Messages
    9 601
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2005
    Messages : 9 601
    Points : 12 977
    Points
    12 977
    Par défaut
    Je pense que la chaîne renvoyée n'est pas compatible avec la version de HTTP supportée par le serveur. Il faut essayer avec ceci :
    Code PHP : Sélectionner tout - Visualiser dans une fenêtre à part
    header('HTTP/1.x 301 Moved Permanently', false, 301);

Discussions similaires

  1. [RegEx] Récupérer une valeur à la suite d'une chaine
    Par Space Cowboy dans le forum Langage
    Réponses: 3
    Dernier message: 17/12/2006, 00h37
  2. Réponses: 6
    Dernier message: 08/11/2006, 11h14
  3. [VBA-E] Comment écrire à la suite dans une cellule ?
    Par bogosse dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 22/07/2006, 13h03
  4. Réponses: 2
    Dernier message: 08/12/2005, 05h28
  5. [Struts] Fermer un Pop up à la suite d'une action
    Par Sniper37 dans le forum Struts 1
    Réponses: 2
    Dernier message: 10/03/2005, 13h58

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo