htaccess重定向“/?id =(。*)”,但只在根?

时间:2013-10-04 00:40:17

标签: .htaccess redirect

我无法重定向工作。我希望的行为将重定向:

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

1 个答案:

答案 0 :(得分:2)

将正则表达式从^(.*)$更改为“^ $``:

RewriteCond %{QUERY_STRING} ^(.*&)?id=([^&]+)$
RewriteRule ^$ http://%{SERVER_NAME}/?other_id=%2 [R=301,L]

^(.*)$正则表达式匹配任何请求URI,因此//foo/dir1/dir2/dir3/file.txt都匹配。但^$仅匹配/