Précédent   Forum des professionnels en informatique > Webmasters - Développement Web > Serveurs (Apache, IIS,...) > Apache
Apache Forum d'entraide Apache. Avant de poster : Cours Apache, FAQ Apache
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 09/12/2010, 21h23   #1
Invité de passage
 
Inscription : décembre 2010
Messages : 5
Détails du profil
Informations forums :
Inscription : décembre 2010
Messages : 5
Points : 0
Points : 0
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.
yagami77 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 10/12/2010, 20h31   #2
Invité de passage
 
Inscription : décembre 2010
Messages : 5
Détails du profil
Informations forums :
Inscription : décembre 2010
Messages : 5
Points : 0
Points : 0
Bon je progresse.
Voila ce que j'ai essayé :

Code :
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 ?
yagami77 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/12/2010, 01h37   #3
Rédacteur/Modérateur
 
Avatar de _Mac_
 
Inscription : août 2005
Messages : 8 277
Détails du profil
Informations forums :
Inscription : août 2005
Messages : 8 277
Points : 8 563
Points : 8 563
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 :
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
_Mac_ est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/12/2010, 02h20   #4
Invité de passage
 
Inscription : décembre 2010
Messages : 5
Détails du profil
Informations forums :
Inscription : décembre 2010
Messages : 5
Points : 0
Points : 0
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 :
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 :
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.
yagami77 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/12/2010, 11h58   #5
Rédacteur/Modérateur
 
Avatar de _Mac_
 
Inscription : août 2005
Messages : 8 277
Détails du profil
Informations forums :
Inscription : août 2005
Messages : 8 277
Points : 8 563
Points : 8 563
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
_Mac_ est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/12/2010, 16h46   #6
Invité de passage
 
Inscription : décembre 2010
Messages : 5
Détails du profil
Informations forums :
Inscription : décembre 2010
Messages : 5
Points : 0
Points : 0
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.
yagami77 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 12/12/2010, 01h12   #7
Rédacteur/Modérateur
 
Avatar de _Mac_
 
Inscription : août 2005
Messages : 8 277
Détails du profil
Informations forums :
Inscription : août 2005
Messages : 8 277
Points : 8 563
Points : 8 563
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
_Mac_ est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 21h29.


 
 
 
 
Partenaires

Hébergement Web