0

我有一个看起来像这样的 .htaccess:

Options +FollowSymLinks
RewriteEngine on
RewriteCond %{HTTP_HOST} !^www\.
RewriteRule ^(.*)$ http://www.%{HTTP_HOST}/$1 [R=301,L]
RewriteRule ^([^.]+)/?$ index.php?query=$1 [L]

我希望这将使所有非 www url 重定向到 www 版本,并在最后给出一个整洁的查询字符串。所以这些网址:

http://site.com/index.php?query=test/page
http://www.site.com/index.php?query=another/test/page

都会重定向到:

http://www.site.com/test/page
http://www.site.com/another/test/page

分别。

但是,一切都只是重定向到:

http://www.site.com

我究竟做错了什么?

4

1 回答 1

0

RewriteRule 忽略 url 中的查询字符串。因此,您需要按如下方式更改规则:

Options +FollowSymLinks
RewriteEngine on

RewriteCond %{HTTP_HOST} !^www\.
RewriteRule ^(.*)$ http://www.%{HTTP_HOST}/$1 [R=301,L,QSA]

RewriteCond %{HTTP_HOST} ^www\.
RewriteRule ^/index[.]php$ /%{QUERY_STRING} [L]

确保在第一条规则中包含 QSA 标志

于 2012-06-22T11:21:00.150 回答