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

  1. #1
    Rédacteur/Modérateur

    Avatar de SpaceFrog
    Homme Profil pro
    Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Inscrit en
    mars 2002
    Messages
    38 428
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 69
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Secteur : Industrie

    Informations forums :
    Inscription : mars 2002
    Messages : 38 428
    Points : 65 912
    Points
    65 912
    Billets dans le blog
    1
    Par défaut URL Rewriting et redirection 301 pour les anciennes URL
    Bonjour,

    Me voilà affublé d'un manager marketing digital qui s'intéresse de près à l'amélioration de la visibilité de nos produits...

    Je dois faire de l'url rewriting, j'ai parcouru quelques tutos, mais certains point restent un peu obscurs:
    Penchons nous sur les pages produits, je me débrouillerais après pour les pages en amont( famille / sosufamille / )
    Actuellement sur mon site j'affiche une page produit en passant en paramètre get l'id du produit.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <a href="produit.php?id=999">mon produit</a>
    sur la page php produit je fais ma requete en BDD pour afficher le bon produit ...
    Mais du coup l'url n'est pas parlante du tout

    Si j'ai bien compris les tutos sur le rewriting il faut que je modifie toutes les urls de mon site pour qu'elle deviennent:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    [mon famille]/[mon sousfamille]/[nom produit]
    Mais du coup je ne vois pas trop comment faire le lien avec l'id produit ?
    Ma première question est donc comment puis-je rattacher le nouveau lien avec l'id du produit car ma reg de rewriting devrait ressembler à ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    produit/[a-z0-9-]+/[a-z0-9-]+/[a-z0-9-]+   article.php?id=$1 [L]
    Mais là je m'ai pas l'id du produit dans le lien
    Faut-il que je rajoute cet id dans mes nouveaux liens ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    produit/[a-z0-9-]+/[a-z0-9-]+/[a-z0-9-]+-([0-9]+)   article.php?id=$1 [L]

    Existe-t-il une possibilité de passer avec php pour gérer cela ?

    Notez que j'ai rajouté "produit/" en début des nouveaux liens pour ne pas qu'il y ait méprise avec d'autre liens car la reg matcherai un trop large scope sans.
    Je me pose alors la question: faut il que ce répertoire existe réellement ? et toute l'arborescence ? ou le rewriting re-route-t-il les path vers mon seul fichier physique produit.php ?



    Une fois ces points d'ombre éclaircis et le rewriting en place, quid des anciens liens ? produit.php?id=999
    J'ai lu un tuto précisant qu'il valait mieux faire des redirections 301 ?
    faut il ma faire pour chaque paramètre get de l'id ? ou un seul redir sur la page produit.php suffit ?

    Dernière question, qu'en est il des espaces dans l'url, vu que me nom de famille, sous familles et articles peuvent comporter des espaces.
    Faut il les remplacer par des tirets (-) ?
    Ma page Developpez - Mon Blog Developpez
    Président du CCMPTP (Comité Contre le Mot "Problème" dans les Titres de Posts)
    Deux règles du succès: 1) Ne communiquez jamais à quelqu'un tout votre savoir...
    Votre post est résolu ? Alors n'oubliez pas le Tag


    réalisations :www.oxygen-translations.fr|www.saftair.fr| www.ouestisol.fr | www.sistac-alizay.fr | www.acoustishop.fr | www.litt.fr | www.ouestventil.fr
    Humour

  2. #2
    Responsable technique

    Avatar de Anomaly
    Homme Profil pro
    Directeur Technique
    Inscrit en
    juin 2003
    Messages
    10 045
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Somme (Picardie)

    Informations professionnelles :
    Activité : Directeur Technique
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : juin 2003
    Messages : 10 045
    Points : 93 274
    Points
    93 274
    Par défaut
    Citation Envoyé par SpaceFrog Voir le message
    Faut-il que je rajoute cet id dans mes nouveaux liens ?
    En effet, tu dois passer l'ID produit quelque part dans l'URL.

    Citation Envoyé par SpaceFrog Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    produit/[a-z0-9-]+/[a-z0-9-]+/[a-z0-9-]+-([0-9]+)   article.php?id=$1 [L]
    Oui, par exemple.

    Citation Envoyé par SpaceFrog Voir le message
    Existe-t-il une possibilité de passer avec php pour gérer cela ?
    Pas bien compris la question. Ici tu as fait le boulot pour que SI une url de ce genre est passée, dans ce cas elle fonctionnera et sera de manière silencieuse remplacée par article.php?id=

    Il te faudra par contre créer une fonction PHP qui prendra un ID de produit et devra te retourner une chaîne qui est l'URL (SEO) correcte de ton produit. Tu utiliseras cette fonction à tous les endroits où tu as besoin de publier une URL de produit.

    Enfin, à terme quand ça sera au point, il sera bien que ta page article.php vérifie par quelle url elle est appelée ; elle comparera l'URL utilisée à celle retournée par ta fonction ci-dessus, et si c'est pas la même, faire une redirection 301 vers la bonne URL.

    Citation Envoyé par SpaceFrog Voir le message
    Notez que j'ai rajouté "produit/" en début des nouveaux liens pour ne pas qu'il y ait méprise avec d'autre liens car la reg matcherai un trop large scope sans.
    Je me pose alors la question: faut il que ce répertoire existe réellement ? et toute l'arborescence ? ou le rewriting re-route-t-il les path vers mon seul fichier physique produit.php ?
    Il n'y a pas besoin que le dossier existe. Attention cependant, si ta page Web à des URLs relatives (par exemple des images), le navigateur tentera de les charger depuis ton répertoire inexistant "produit", donc il faudra soit que les URLs annexes (images, liens) soient absolues (l'idéal), soit utiliser la balise BASE.

    Citation Envoyé par SpaceFrog Voir le message
    Dernière question, qu'en est il des espaces dans l'url, vu que me nom de famille, sous familles et articles peuvent comporter des espaces.
    Faut il les remplacer par des tirets (-) ?
    Bien que ça ne soit pas strictement obligatoire, oui je recommande fortement de remplacer les espaces par des tirets.
    Responsable technique forum & site

    Si ce message (ou un autre) vous a aidé et/ou vous semble pertinent, votez pour lui avec

  3. #3
    Rédacteur/Modérateur

    Avatar de SpaceFrog
    Homme Profil pro
    Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Inscrit en
    mars 2002
    Messages
    38 428
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 69
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Secteur : Industrie

    Informations forums :
    Inscription : mars 2002
    Messages : 38 428
    Points : 65 912
    Points
    65 912
    Billets dans le blog
    1
    Par défaut
    Merci de ta réponse Ano,

    Pour préciser le point "Existe-t-il une possibilité de passer avec php pour gérer cela ?"

    Au départ mon idée aurait été de conserver tous mes liens physique dans la page vers produit.php?id=999
    Mais que ce soit un script php sur cette page qui tranforme l'url à afficher en récupérant par requête les famille et sous famille du produit et en concaténant l'url à afficher.

    Mais d'après ce que j'en comprends c'est en fait l'inverse?
    Je dois générer des "fake urls" qui sont parsées par le htaccess et redirigent de façon transparente pour le user vers la page produit.php avec le parmaètre get donc le user ne voit que l'url famille/sous-famille/produit-id mais se trouve en fait sur la page produit php
    Ma page Developpez - Mon Blog Developpez
    Président du CCMPTP (Comité Contre le Mot "Problème" dans les Titres de Posts)
    Deux règles du succès: 1) Ne communiquez jamais à quelqu'un tout votre savoir...
    Votre post est résolu ? Alors n'oubliez pas le Tag


    réalisations :www.oxygen-translations.fr|www.saftair.fr| www.ouestisol.fr | www.sistac-alizay.fr | www.acoustishop.fr | www.litt.fr | www.ouestventil.fr
    Humour

  4. #4
    Responsable technique

    Avatar de Anomaly
    Homme Profil pro
    Directeur Technique
    Inscrit en
    juin 2003
    Messages
    10 045
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Somme (Picardie)

    Informations professionnelles :
    Activité : Directeur Technique
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : juin 2003
    Messages : 10 045
    Points : 93 274
    Points
    93 274
    Par défaut
    Citation Envoyé par SpaceFrog Voir le message
    Je dois générer des "fake urls" qui sont parsées par le htaccess et redirigent de façon transparente pour le user vers la page produit.php avec le parmaètre get donc le user ne voit que l'url famille/sous-famille/produit-id mais se trouve en fait sur la page produit php
    Normalement c'est la meilleure manière.

    Citation Envoyé par SpaceFrog Voir le message
    Pour préciser le point "Existe-t-il une possibilité de passer avec php pour gérer cela ?"

    Au départ mon idée aurait été de conserver tous mes liens physique dans la page vers produit.php?id=999
    Mais que ce soit un script php sur cette page qui tranforme l'url à afficher en récupérant par requête les famille et sous famille du produit et en concaténant l'url à afficher.
    Mais on peut faire ça aussi. Le principe serait de coller un ob_start() en début de page. En fin de page, récupérer avec ob_get_clean() le contenu de la page, puis passer un coup de preg_replace_callback pour détecter tous les liens et utiliser la fonction PHP que tu as écrite en guise de callback pour remplacer les anciens liens par les nouveaux et afficher le résultat. Cela me paraît un peu lourd mais c'est une autre solution.
    Responsable technique forum & site

    Si ce message (ou un autre) vous a aidé et/ou vous semble pertinent, votez pour lui avec

  5. #5
    Rédacteur/Modérateur

    Avatar de SpaceFrog
    Homme Profil pro
    Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Inscrit en
    mars 2002
    Messages
    38 428
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 69
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Secteur : Industrie

    Informations forums :
    Inscription : mars 2002
    Messages : 38 428
    Points : 65 912
    Points
    65 912
    Billets dans le blog
    1
    Par défaut
    Que veux tu dire pas meilleure manière ?
    Meilleure pour le référencement ? Car les liens figurant physiquement sur la page ?

    En fait je crois que tu n'as pas tout a fait compris mon questionnement.

    situation actuelle:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    < a href="produit.php?id=999"> mon produit</a>
    le user clique dessus et arrive donc sur la page du produit générée par php après requete dans la base avec dans sa barre d'addresse
    produit.php?id=999
    situation 1:
    les liens de la page restent identiques
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    < a href="produit.php?id=999"> mon produit</a>
    le user clique dessus et arrive donc sur la page du produit générée par php après requete dans la base avec dans sa barre d'addresse
    mais un script php ou autre permet de modifier l'url de la page de destination
    famille/sous-famille/produit
    situation 2:
    les liens de la page son générés en lien fakes
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    < a href="famille/sous-famille/produit-id"> mon produit</a>
    le user clique dessus et le hataccess parse le lien pour récupérer l'id et rediriger de façon transparente sur la page du La barre d'addressz montre la fake url cliquée
    famille/sous-famille/produit
    La quelle de ces deux situation 1 ou 2 est la bonne version ?
    Sont elle bonnes toutes les deux ?
    La quelle serait le meilleure en terme de référencement ?

    Pour la 2 je vois comment générer les fake url et la reg poru le rewriting
    Pour la 1 je ne sasi pas comment dire à php de réécrire l'url
    Ma page Developpez - Mon Blog Developpez
    Président du CCMPTP (Comité Contre le Mot "Problème" dans les Titres de Posts)
    Deux règles du succès: 1) Ne communiquez jamais à quelqu'un tout votre savoir...
    Votre post est résolu ? Alors n'oubliez pas le Tag


    réalisations :www.oxygen-translations.fr|www.saftair.fr| www.ouestisol.fr | www.sistac-alizay.fr | www.acoustishop.fr | www.litt.fr | www.ouestventil.fr
    Humour

  6. #6
    Responsable technique

    Avatar de Anomaly
    Homme Profil pro
    Directeur Technique
    Inscrit en
    juin 2003
    Messages
    10 045
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Somme (Picardie)

    Informations professionnelles :
    Activité : Directeur Technique
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : juin 2003
    Messages : 10 045
    Points : 93 274
    Points
    93 274
    Par défaut
    Citation Envoyé par SpaceFrog Voir le message
    La quelle de ces deux situation 1 ou 2 est la bonne version ?
    Sont elle bonnes toutes les deux ?
    La quelle serait le meilleure en terme de référencement ?
    C'est la 2, absolument et sans hésitation. Tu dois faire disparaître de ton site toute ancienne URL, Google n'aime pas du tout qu'on lui donne à manger une URL qui débouche sur une redirection.

    Dans tous les cas, il te faudra de toute façon gérer le cas où quelqu'un arrive sur une page article.php en passant par une ancienne URL (par exemple, le résultat d'une recherche). Et pour ça il faudra comparer $_SERVER['REQUEST_URI'] à la belle URL, et faire une redirection 301 en PHP si ça ne correspond pas.

    Cela permet aussi de gérer un autre cas : une URL qui change suite, par exemple, à un renommage de produit.
    Par exemple admettons que ton produit s'appelle "SOPPALIN", ton url est par exemple /produit/soppalin-1447

    Ensuite, quelqu'un se rend compte de la faute d'orthographe et corrige le nom du produit en "SOPALIN", l'url du coup change et devient /produit/sopalin-147

    Il faut bien que, si l'utilisateur vient par :
    produit.php?1447
    /produit/soppalin-1447

    dans les deux cas il soit redirigé en 301 vers l'URL la plus récente, qui est
    /produit/sopalin-1447
    Responsable technique forum & site

    Si ce message (ou un autre) vous a aidé et/ou vous semble pertinent, votez pour lui avec

  7. #7
    Rédacteur/Modérateur

    Avatar de SpaceFrog
    Homme Profil pro
    Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Inscrit en
    mars 2002
    Messages
    38 428
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 69
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Secteur : Industrie

    Informations forums :
    Inscription : mars 2002
    Messages : 38 428
    Points : 65 912
    Points
    65 912
    Billets dans le blog
    1
    Par défaut
    Ok pour la 2, j'y vois un peu plus clair.

    Par contre pour le coup du 301
    J'ai bien compris que le user qui arrive pas l'ancienne url avec l'id doit être redirigé donc vers une url de type famille/sousfamille/produit/id

    Il faudrait donc que je créée une page php genre newproduit.php, que je redirige la page produit.php en htaccess vers cette page en recupérant l'id

    et que cette page newproduit.php fasse un header location vers une concaténation de la nouvelle fake url "famille/sous-famille/produit/id" ?

    Mais alors cela risque de créer une boucle de redirection ?
    Comment puis-je l'éviter ?
    En créant une nouvelle page getproduit.php vers la quelle redirige les fake urls?
    Ma page Developpez - Mon Blog Developpez
    Président du CCMPTP (Comité Contre le Mot "Problème" dans les Titres de Posts)
    Deux règles du succès: 1) Ne communiquez jamais à quelqu'un tout votre savoir...
    Votre post est résolu ? Alors n'oubliez pas le Tag


    réalisations :www.oxygen-translations.fr|www.saftair.fr| www.ouestisol.fr | www.sistac-alizay.fr | www.acoustishop.fr | www.litt.fr | www.ouestventil.fr
    Humour

  8. #8
    Responsable technique

    Avatar de Anomaly
    Homme Profil pro
    Directeur Technique
    Inscrit en
    juin 2003
    Messages
    10 045
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Somme (Picardie)

    Informations professionnelles :
    Activité : Directeur Technique
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : juin 2003
    Messages : 10 045
    Points : 93 274
    Points
    93 274
    Par défaut
    Citation Envoyé par SpaceFrog Voir le message
    J'ai bien compris que le user qui arrive pas l'ancienne url avec l'id doit être redirigé donc vers une url de type famille/sousfamille/produit/id
    Oui.

    Citation Envoyé par SpaceFrog Voir le message
    Il faudrait donc que je créée une page php genre newproduit.php, que je redirige la page produit.php en htaccess vers cette page en recupérant l'id
    Non, tu fais ça directement dans produit.php ; on parle de plusieurs URLs d'accès à un même script php, en l'occurent produit.php. Il n'y a nullement besoin de créer un nouveau fichier PHP.

    Citation Envoyé par SpaceFrog Voir le message
    Mais alors cela risque de créer une boucle de redirection ?
    Il suffit de comparer avec $_SERVER['REQUEST_URI'] pour connaître l'URL d'appel, ce qui est bien plus simple que ce que tu suggères. Produit.php va juste vérifier s'il est appelé correctement, et si c'est pas le cas, il redirige (ce qui ramène vers produit.php, mais c'est important pour Google qu'il n'y ait qu'une seule URL d'accès, sinon duplicate content, et ça c'est très mauvais).
    Responsable technique forum & site

    Si ce message (ou un autre) vous a aidé et/ou vous semble pertinent, votez pour lui avec

  9. #9
    Rédacteur/Modérateur

    Avatar de SpaceFrog
    Homme Profil pro
    Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Inscrit en
    mars 2002
    Messages
    38 428
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 69
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Secteur : Industrie

    Informations forums :
    Inscription : mars 2002
    Messages : 38 428
    Points : 65 912
    Points
    65 912
    Billets dans le blog
    1
    Par défaut
    Je suis arrivé avec plein d'interrogations, je repars avec une vision clair de travail à faire.
    Mille mercis grand manitou !
    :awe:
    Ma page Developpez - Mon Blog Developpez
    Président du CCMPTP (Comité Contre le Mot "Problème" dans les Titres de Posts)
    Deux règles du succès: 1) Ne communiquez jamais à quelqu'un tout votre savoir...
    Votre post est résolu ? Alors n'oubliez pas le Tag


    réalisations :www.oxygen-translations.fr|www.saftair.fr| www.ouestisol.fr | www.sistac-alizay.fr | www.acoustishop.fr | www.litt.fr | www.ouestventil.fr
    Humour

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 12
    Dernier message: 07/05/2013, 22h08
  2. 404 pour les anciennes URL
    Par guigo dans le forum Apache
    Réponses: 1
    Dernier message: 03/12/2010, 02h31
  3. Réponses: 17
    Dernier message: 15/11/2010, 23h33
  4. URL Rewriting et redirection : comment allier les deux ?
    Par Benamour Jr dans le forum Langage
    Réponses: 1
    Dernier message: 18/09/2010, 17h47
  5. Besoin d'explication - Redirection 301 pour l'index
    Par Seiferph dans le forum Référencement
    Réponses: 2
    Dernier message: 30/01/2009, 19h39

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