Rewriting tout bête mais...

WRInaute passionné
Bonjour,

Je cherche à transférer des url de ce type :
-http://www.yazerty.net/index.php?2005/04/19/58-xraye
(.../index.php?anne/mois/jour/numpost-titre)

Vers :
-http://www.yazerty.net/post/2005/04/19/58-xraye
(.../post/anne/mois/jour/numpost-titre)

J'en ai un paquet (ce sont des posts de blog) et je souhaite que Google prenne le plus grand soin de ce transfert, transfert bien le pr qui leur est lié, et note bien les nouvelles urls.

J'ai tenté ceci, mais ça ne marche pas :

Code:
RedirectMatch permanent /index.php?([0-9]{4}/[0-9]{2}/[0-9]{2}/[0-9]+.*)$ http://www.yazerty.net/post/$1

Pourriez-vous me donner un petit coup de pouce svp ?
 
WRInaute passionné
Je crois que pour analyser le QUERY_STRING par htaccess, il faut passer par un RewriteCond :
Code:
RewriteCond %{QUERY_STRING}  ^([0-9]{4}/[0-9]{2}/[0-9]{2}/[0-9]+-.+)$
RewriteRule ^index\.php$ post/$1 [L,R=301]

(j'ai fait ça au feeling, je ne garantie rien :roll:)

Sinon tu peux passer par un script sur ta page php qui renvoie un 301 vers la nouvelle adresse :wink:
 
WRInaute passionné
Ca n'a aucun effet quand je place ce code dans mon .htaccess à la racine.

Peut-être que cela vient du fait que j'ai d'autres rewrite rules (indispensables au bon fonctionnement de mon site) avant :- ?

Code:
# Pour activer PHP 5 :
AddType x-mapp-php5 .php

# Pour des URL sympas avec DotClear 2
RewriteEngine On
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule (.*) index.php/$1 
RewriteRule ^index.php$  index.php/

RewriteCond %{QUERY_STRING}  ^([0-9]{4}/[0-9]{2}/[0-9]{2}/[0-9]+-.+)$
RewriteRule ^index\.php$ post/$1 [L,R=301]
 
WRInaute occasionnel
Et comme ça
Code:
RewriteCond %{QUERY_STRING}  ^([0-9]{4}/[0-9]{2}/[0-9]{2}/[0-9]+-.+)$
RewriteRule ^index\.php$ post/%1 [L,R=301]
Sinon spécifie le type erreur (404, 500)
 
WRInaute passionné
Quand je vais sur -http://www.yazerty.net/index.php?2005/04/19/58-xraye ça m'affiche simplement ma page d'accueil.

Ce n'est pas une 404 parce que quand je fais -http://www.yazerty.net/fdsf/index.asp (qui n'existe pas) par exemple, ça m'affiche bien ma page 404.
 
WRInaute occasionnel
Je dirais un probleme de priorité.
Et comme ça ?
Code:
# Pour activer PHP 5 :
AddType x-mapp-php5 .php

# Pour des URL sympas avec DotClear 2
RewriteEngine On
RewriteBase /

RewriteCond %{QUERY_STRING}  ^([0-9]{4}/[0-9]{2}/[0-9]{2}/[0-9]+-.+)$
RewriteRule ^index\.php$ post/%1 [L,R=301]

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule (.*) index.php/$1
RewriteRule ^index.php$  index.php/
 
WRInaute passionné
C'est mieux mais ça me met la fin en double :( :
-http://www.yazerty.net/post/2005/04/19/58-xraye?2005/04/19/58-xraye (alors qu'il faudrait simplement -http://www.yazerty.net/post/2005/04/19/58-xraye)
 
WRInaute passionné
magic corp. a dit:
Et en remplacant
Code:
RewriteRule ^index\.php$ post/%1 [L,R=301]
Par
Code:
RewriteRule ^index\.php$ post/%1? [L,R=301]

Question ?
J'ai vu la doc pour le ? à la fin, et je comprend pas trop...


httpd.apache.org a dit:
Note: Query String
The Pattern will not be matched against the query string. Instead, you must use a RewriteCond with the %{QUERY_STRING} variable. You can, however, create URLs in the substitution string, containing a query string part. Simply use a question mark inside the substitution string, to indicate that the following text should be re-injected into the query string. When you want to erase an existing query string, end the substitution string with just a question mark. To combine a new query string with an old one, use the [QSA] flag.
 
WRInaute occasionnel
Je ne saurais expliquer le pourquoi de comment.

Mais comme indiqué dans la doc :
When you want to erase an existing query string, end the substitution string with just a question mark.
on vois que le "?" peu servir à effacer le "query string" (raison pour laquel je l'ai utilisé)

Je pense que par defaut, lorsque l'on utilise la variable QUERY_STRING dans la règle, le mod_rewrite la ré-injecte automatiquement dans la nouvelle URL, sauf si on indique explicitement de l'effacer (avec le ?) :? ... Nous ne voyons pas d'autre explication :D

Si qqu de plus caler sur le sujet passe par là, je suis preneur de l'explication exacte ... en attendant, il faud juste ce souvenir que ça existe ;)
 
WRInaute passionné
magic corp. a dit:
Je pense que par defaut, lorsque l'on utilise la variable QUERY_STRING dans la règle, le mod_rewrite la ré-injecte automatiquement dans la nouvelle URL, sauf si on indique explicitement de l'effacer (avec le ?) :? ... Nous ne voyons pas d'autre explication :D

Et dans ce cas, la rêgle suivante devrait aussi passer :

Code:
RewriteRule ^index\.php$ post/%1? [L,R=301]
 
WRInaute occasionnel
Comme la variable QUERY_STRING est utilisé dans le RewriteCond, qui pour moi fait en quelque sorte partie du RewriteRule qui suit, elle est ré-injécté dans la nouvelle URL, mais je ne saurais détailler.
 
Discussions similaires
Haut