2009-10-03 3 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] 

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

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

ответ

8

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

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 
+0

«Если строка запроса содержит только идентификатор», а если нет, это верно только для id? – Qiao

+1

RewriteCond% {QUERY_STRING}^id = (. *) $ Означает, что правило применяется только в том случае, если строка запроса соответствует. В этом случае он будет соответствовать любой строке запроса, которая начинается с id = –

Смежные вопросы