Вопросительный знак в конце RewriteRule - PullRequest
2 голосов
/ 03 октября 2009
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]

В первом случае результат
new-site.com/newpage-3?id=3
в секунду
new-site.com/newpage-3

Что означает вопросительный знак во втором правиле перезаписи?

1 Ответ

8 голосов
/ 03 октября 2009

? в конце пункта назначения (пункты назначения не являются регулярными выражениями) означает переход к этому месту назначения без строки запроса.

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

Если строка запроса содержит только идентификатор, она сохраняет значение, которое затем используется в месте назначения, поэтому, если у вас есть

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

вы получите

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

Если у вас есть

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

Вы отправитесь в тот же пункт назначения, но с пустой строкой запроса, поэтому перейдите к

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

закончится в

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