2

我一直无法重定向到工作。我希望有的行为会重定向:

www.mysite.com/?id=12345

www.mysite.com/?other_id=12345

我写的规则似乎抓住了任何与最后匹配的 url,如:

www.mysite.com/directory/another/?id=12345

我只希望它在根级别工作,而不是所有级别。

我目前的规则如下:

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

出于某种原因,我不得不包含第一个正则表达式,因为没有它它不接受它。没有第一个 ^(.*&) 它一直说该站点正在创建一个不起作用的重定向并轰炸,这可能是我的问题的一部分。

有没有更好的方法来编写这条规则?还是不可能单独进行根级别匹配?

谢谢,

银虎

4

1 回答 1

2

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

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

^(.*)$则表达式匹配任何请求 URI,所以//foo/dir1/dir2/dir3/file.txt将匹配。但^$唯一的匹配/

于 2013-10-04T02:18:33.873 回答