2009-10-03 5 views
1

Je déplace mon site vers un nouveau domaine. Vous avez besoin de rediriger les pages
de
old-site.com/oldpage.php?id=X
à
new-site.com/newpage-X
(X est le numéro)htaccess 301 rediriger l'URL dynamique

Pourquoi cette règle ne marche pas?

RewriteEngine on 
RewriteRule ^oldpage.php?id=(.*)$ http://new-site.com/newpage-$1 [R=301,L] 
+0

Dupliquer: http://stackoverflow.com/questions/1513308/question-mark-in-the-end-of-rewriterule – Gumbo

Répondre

0

Le RewriteRule ne fonctionne que sur le URL path et non la requête URL. Vous devez utiliser la directive RewriteCond pour tester la requête d'URL (%{QUERY_STRING}). Essayez donc cette règle:

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

Cette règle préserve également les autres paramètres de la requête.

+0

merci, ça marche. mais plusieurs URL que j'ai essayé tôt avec de mauvaises règles redirigent toujours vers la mauvaise page. Est-ce un problème de serveur? Pourquoi il se souvient de ça? – Qiao

+0

D'accord, c'est Firefox qui s'en souvient. Étrange. – Qiao

0

Je soupçonne que vous devez utiliser QUERY_STRING

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

Hope this helps

+0

il ajoute? Id = X à la nouvelle URL - http://new-site.com/newpage-3? id = 3 – Qiao

+0

si RewriteRule^oldpage \ .php $ http://new-site.com/newpage-%1? , que c'est ok http://stackoverflow.com/questions/1513308/question-mark-in-the-end-of-rewriterule – Qiao