2009-10-03 9 views
2
RewriteCond %{QUERY_STRING} ^id=(.*)$ 
RewriteRule ^oldpage\.php$ http://new-site.com/newpage-%1 [R=301,L] 
and 
RewriteRule ^oldpage\.php$ http://new-site.com/newpage-%1? [R=301,L] 

En premier résultat de cas est
new-site.com/newpage-3?id=3
deuxième
new-site.com/newpage-3Question mark à la fin de RewriteRule

Que signifie un point d'interrogation dans la deuxième règle de réécriture?

Répondre

8

Le? à la fin d'une destination (les destinations ne sont pas des expressions régulières) signifie aller à cette destination sans chaîne de requête.

RewriteCond %{QUERY_STRING} ^id=(.*)$ 
RewriteRule ^oldpage\.php$ http://new-site.com/newpage-%1 [R=301,L] 

Si la chaîne de requête ne contient qu'un identifiant, il stocke la valeur qui est ensuite utilisée dans la destination, donc si vous avez

http://foo.com/oldpage.php?id=54 

vous finirez avec

http://new-site.com/newpage-54?id=54 

Si vous avez

RewriteCond %{QUERY_STRING} ^id=(.*)$ 
RewriteRule ^oldpage\.php$ http://new-site.com/newpage-%1? [R=301,L] 

Vous aller à la même destination mais avec une chaîne de requête vide, donc aller à

http://foo.com/oldpage.php?id=54 

finira dans

http://new-site.com/newpage-54 
+0

« Si la chaîne de requête ne contient qu'un identifiant » et sinon, est-ce seulement vrai pour id? – Qiao

+1

Le RewriteCond% {QUERY_STRING}^id = (. *) $ Signifie que la règle s'applique uniquement si la chaîne de requête correspond. Dans ce cas, il va correspondre à toute chaîne de requête commençant par id = –

Questions connexes