我有一个.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
我做错了什么?
答案 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标志