.htaccess重定向丢失查询字符串?

时间:2012-06-22 09:09:14

标签: apache .htaccess redirect

我有一个.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网址重定向到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

我做错了什么?

1 个答案:

答案 0 :(得分: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标志