mod_rewrite encore et toujours
Par Grumpf le mardi, septembre 18 2007, 01:28 - geekage - Lien permanent
je cherche à ameliorer mon pagerank, pour cela il ne faut pas (ou peu) de contenu dupliqué...
avec mes nombres modif d'url du blog google continue a crawl des "vieux" truc
/index.php?post/... /?post/... /post/...
bien sur c'est 3 fois le meme contenu, encore une fois mod_rewrite va nous aider à malmener le cache de google à grand coup de réponses HTTP 301/302 (object as move)
on va faire court il est tard, ca ma pris la soirée à résoudre , voila la partie du .htaccess
RewriteCond %{REQUEST_URI} ^/$
RewriteCond %{QUERY_STRING} (.+)
RewriteRule (.*)$ http://%{SERVER_NAME}/%1? [R=301,L]
donc si on demande /?qqchose on est redirigé vers /qqchose , je n'ai pas réussis a faire marcher la meme chose pour index.php?
car j'ai un pb de boucle...
en écrivant ce billet j'ai eu la révélation, la réponse, la solution.
je viens de passer le blog en PATH_INFO (il était encore en QUERY_STRING cf vieux billets sur mod_rewrite + dotclear)
j'ai modif la ligne pour le rewrite du blog:
RewriteRule (.*)$ index.php?$1 [L]
devenu
RewriteRule (.*)$ index.php/$1 [L]
ennorme modif il faut avouer, mais au lieu de redirect les /trucdublog vers /index.php?trucdublog il pointe sur /index.php/trucdublog (en redirect Interne, non visible au client)
j'ai donc modif le reste pour que ca marche comme je voulais a savoir /?qqchose & /index.php?qqchose redirigé vers /qqchose
RewriteCond %{REQUEST_URI} ^(/|/index.php)$
RewriteCond %{QUERY_STRING} (.+)
RewriteRule (.*)$ http://%{SERVER_NAME}/%1? [R=301,L]
si la demande est / ou /index.php et que la query_string n'est pas vide (en regexp "+" = 1char mini), on répond 301 et indique la nouvelle url
et voila, magie!
le code HTTP 301 est un "301 Moved Permanently Document déplacé de façon permanente" (source) il forcerat le cache à s'update "normalement"
le 302 est un temporaire
