0

我在我的 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。我该怎么做呢?

谢谢,德里克

4

1 回答 1

1

首先,您的第一条规则会捕获其中包含的任何URI special.php,即使它后面是一堆字符。要将其限制为 only 且完全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]

你应该很高兴。

于 2012-05-15T02:07:05.117 回答