2009-10-03 1 views
1

Я перемещаю свой сайт в новый домен. Необходимость перенаправления страниц
из
old-site.com/oldpage.php?id=X
в
new-site.com/newpage-X
(X это номер)htaccess 301 перенаправить динамический url

Почему это правило не работает?

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

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

ответ

0

RewriteRule действительно работает только на URL path и не URL запрос. Вам нужно использовать директиву RewriteCond для проверки URL-запроса (%{QUERY_STRING}). Попробуйте это правило:

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

Это правило также сохранит другие параметры в запросе.

+0

спасибо, он работает. , но несколько URL-адресов, которые я пробовал на ранней стадии с неправильными правилами, все же перенаправляются на неправильную страницу. Это проблема с сервером? Почему он это помнит? – Qiao

+0

Это нормально, что это помнит Firefox. Странный. – Qiao

0

Я подозреваю, что вам нужно будет использовать query_string

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

Надеется, что это помогает

+0

добавляет? Id = X к новому URL-адресу - http://new-site.com/newpage-3? id = 3 – Qiao

+0

if RewriteRule^oldpage \ .php $ http://new-site.com/newpage-%1? , это нормально http://stackoverflow.com/questions/1513308/question-mark-in-the-end-of-rewriterule – Qiao