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 :

URL rewriting pour des URL d'un site déjà existant et redirection 301


Sujet :

Apache

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

    Informations forums :
    Inscription : Décembre 2010
    Messages : 5
    Points : 2
    Points
    2
    Par défaut URL rewriting pour des URL d'un site déjà existant et redirection 301
    Salut,

    J'aimerai qu'une personne (ou plus) qui s'y connait bien en Url rewriting et en redirection 301 me dise si ce que je veux faire est bien faisable et comment m'y prendre.

    J'ai un site dont j'aimerai réécrire l'url des pages d'articles.

    L'url d'origine est écrite sous cette forme :
    index.php?page=article&id=123

    Quand je la réécrit cela donne (le forme actuelle) :
    article123.html

    Maintenant j'aimerai faire une réécriture du genre :
    123-nom-de-l-article.html

    Le problème c'est que toutes les pages de mon site sont déjà indexées et bien positionnées et je n'aimerai pas perdre ça.
    Comment faire pour faire une réécriture et dire à Google que ma première redirection est redirigée (301) vers la nouvelle. Je ne sais pas si c'est claire.

    J'ai pas arrêté d'y pensé depuis 2 jours mais je ne vois toujours pas comment m'y prendre.

    Merci d'avance pour vos réponses.

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

    Informations forums :
    Inscription : Décembre 2010
    Messages : 5
    Points : 2
    Points
    2
    Par défaut
    Bon je progresse.
    Voila ce que j'ai essayé :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    RewriteRule ^([0-9]+)-([0-9a-z-]+).html$ article$1.html [L]
    et la réécriture fonctionne, maintenant je me demande comment faire pour la redirection 301.

    Pourriez vous svp m'aider ?

  3. #3
    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
    Il faut que tu réécrives les URL en article[0-9]+\.html sur une page PHP qui va recalculer la nouvelle URL et rediriger avec
    Code PHP : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    header("301 Permanently Moved");
    header("Location: " + $nouvelle_url);
    Je propose de passer par une page PHP car j'imagine que le nom de l'article provient d'une base de données et qu'Apache seul ne sera pas capable d'exécuter la moindre requête pour récupérer ce titre.

    Du détail, du détail, du détail !!!
    Revenons à la source : lisons la documentation et les fichiers de trace, la réponse à notre problème s'y trouve sans doute

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

    Informations forums :
    Inscription : Décembre 2010
    Messages : 5
    Points : 2
    Points
    2
    Par défaut
    Citation Envoyé par _Mac_ Voir le message
    Il faut que tu réécrives les URL en article[0-9]+\.html sur une page PHP qui va recalculer la nouvelle URL et rediriger avec
    Code PHP : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    header("301 Permanently Moved");
    header("Location: " + $nouvelle_url);
    Je propose de passer par une page PHP car j'imagine que le nom de l'article provient d'une base de données et qu'Apache seul ne sera pas capable d'exécuter la moindre requête pour récupérer ce titre.
    Je ne comprends pas pourquoi je devrai créer une autre page php. Ça va être difficile à mettre en place.
    Sinon, le nom de l'article provient d'une base de données mais pour trouver l'article en question c'est pas l'url réécrite qui va en décider mais plutôt l'id de l'article en début de l'url. Par exemple :
    monsite.com/123-ceci-est-l-article-original.html
    renverra le même article que
    monsite.com/123-ceci-n-est-pas-l-article-original.html
    puisque ce qui prime c'est l'id "123" de l'article à afficher.
    Je ne sais pas si c'est clair.

    Est ce qu'un simple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    RewriteEngine on
    RewriteCond %{QUERY_STRING} ^couleur=(.*)$
    RewriteRule ^index\.php$ http://www.domaine.com/%1.html? [L,R=301]
    Ne ferai pas l'affaire, bien sûr en l'adaptant à mon cas, ce que je n'arrive pas à faire.

    Merci.

  5. #5
    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
    On est bien d'accord que c'est l'ID qui figure dans l'URL qui sert à retrouver l'article à afficher, mais là n'est pas le problème. Pour faire ça, tu as déjà la règle qui va bien.

    Si j'ai bien compris, il faut faire en sorte que quand quelqu'un (un Googlebot par exemple) demande l'URL article123.html, il faut en fait le rediriger en 301 sur
    123-nom-de-l-article.html. Est-ce bien ça ? Tout ce que je dis c'est que pour faire cette redirection, si on ne veut pas écrire un .htaccess de 15 km de long avec toutes les URL d'article possibles, Apache ne peut pas tout faire car il ne sait pas se connecter à une base de données. Il faut donc rediriger les URL article[0-9]+\.html vers un script PHP qui va faire la requête en base de données (car une fois de plus, Apache ne sait pas le faire) pour calculer l'URL et faire la redirection 301.

    Du détail, du détail, du détail !!!
    Revenons à la source : lisons la documentation et les fichiers de trace, la réponse à notre problème s'y trouve sans doute

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

    Informations forums :
    Inscription : Décembre 2010
    Messages : 5
    Points : 2
    Points
    2
    Par défaut
    Citation Envoyé par _Mac_ Voir le message
    On est bien d'accord que c'est l'ID qui figure dans l'URL qui sert à retrouver l'article à afficher, mais là n'est pas le problème. Pour faire ça, tu as déjà la règle qui va bien.

    Si j'ai bien compris, il faut faire en sorte que quand quelqu'un (un Googlebot par exemple) demande l'URL article123.html, il faut en fait le rediriger en 301 sur
    123-nom-de-l-article.html. Est-ce bien ça ? Tout ce que je dis c'est que pour faire cette redirection, si on ne veut pas écrire un .htaccess de 15 km de long avec toutes les URL d'article possibles, Apache ne peut pas tout faire car il ne sait pas se connecter à une base de données. Il faut donc rediriger les URL article[0-9]+\.html vers un script PHP qui va faire la requête en base de données (car une fois de plus, Apache ne sait pas le faire) pour calculer l'URL et faire la redirection 301.
    On est bien d'accord sur le fond. Quant à la forme je trouve que ca ne m'arrange pas de faire une redirection en php.

    Est-ce qu'il ne serait pas possible d'utiliser une seule instruction de redirection 301 pour toutes mes url puisqu'on peut utiliser des REGEX dans .htaccess. Un truc du genre :

    rediriger en 301 -> article([0-9]+).html
    vers -> $1-([0-9a-z-]+).html

    Peu importe ce qui se trouvera dans le ([0-9a-z-]+) puisque c'est moi qui réécrira l'url de la même façon à chaque fois donc aucun risque de duplicate content.

    Merci encore une fois pour ton aide.

  7. #7
    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
    Citation Envoyé par yagami77 Voir le message
    Peu importe ce qui se trouvera dans le ([0-9a-z-]+) ...
    Là est bien le problème : dans un .htaccess, ce sera nécessairement une valeur fixe. En gros, tu passeras de article123.html à 123-article.html, super...

    Du détail, du détail, du détail !!!
    Revenons à la source : lisons la documentation et les fichiers de trace, la réponse à notre problème s'y trouve sans doute

Discussions similaires

  1. URL rewriting pour une URL sans fichier
    Par Kentin64 dans le forum Apache
    Réponses: 3
    Dernier message: 17/04/2013, 11h10
  2. URL rewriting pour des images
    Par walidEduc dans le forum Apache
    Réponses: 6
    Dernier message: 20/03/2013, 16h28
  3. Redirection URL Rewrité vers nouvelle URL rewrité
    Par Dlteck2000 dans le forum Apache
    Réponses: 5
    Dernier message: 20/01/2013, 18h29
  4. Réponses: 6
    Dernier message: 21/05/2010, 17h40
  5. Réponses: 2
    Dernier message: 14/04/2009, 10h27

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