我在htaccess中使用这种格式来重定向多个页面/链接:
RewriteEngine On
RewriteRule special.php http://www.mysite.com [R=301]
...
...
RewriteRule http://www.mysite.com/special.php?t=master http://www.mysite.com/index.php?q=former [R=301, L]
我注意到,首先,只有顶线才能捕捉到任何东西,事实上其他人,比如底线,在我放入顶线之前什么也没做。有什么想法吗?
其次,mysite.com/special.php?t=grave被上面的顶行重定向到mysite.com/?t=grave,从而保留了URL中的变量。我不想要这个,我只是想让它去没有变量的mysite.com。我该怎么做?
谢谢, 德里克
答案 0 :(得分:1)
首先,您的第一条规则会捕获带有special.php
的任何 URI,即使后面跟着一堆字符也是如此。要将其限制为仅special.php
,并确保查询字符串被丢弃,请将其更改为
RewriteRule ^special.php$ http://www.mysite.com/? [L, R=301]
其次,重写规则仅匹配 http://www.mysite.com/之后的部分(注意最后一个斜杠)和之前查询字符串(问号后面的部分) 。因此,如果您将这些规则的格式更改为
RewriteCond %{QUERY_STRING} t=master
RewriteRule ^special.php$ index.php?q=former [R=301, L]
你应该好好去。