我无法重定向工作。我希望的行为将重定向:
www.mysite.com/?id=12345
到
www.mysite.com/?other_id=12345
我写的规则似乎抓住任何匹配最终的网址,如:
www.mysite.com/directory/another/?id=12345
我只是想让它在根级别工作,而不是所有级别。
我目前的规则如下:
RewriteCond %{QUERY_STRING} ^(.*&)?id=([^&]+)$
RewriteRule ^(.*)$ http://%{SERVER_NAME}/?other_id=%2 [R=301,L]
出于某种原因,我必须包括第一个正则表达式,因为没有它就不接受它。没有第一个^(。*&)它一直说该网站正在创建一个无法工作和轰炸的重定向,这可能是我的问题的一部分。
有没有更好的方法来编写此规则?或者仅仅是根级别匹配?
谢谢,
此Silvertiger
答案 0 :(得分:2)
将正则表达式从^(.*)$
更改为“^ $``:
RewriteCond %{QUERY_STRING} ^(.*&)?id=([^&]+)$
RewriteRule ^$ http://%{SERVER_NAME}/?other_id=%2 [R=301,L]
^(.*)$
正则表达式匹配任何请求URI,因此/
,/foo
和/dir1/dir2/dir3/file.txt
都匹配。但^$
仅匹配/
。