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 バージョンにリダイレクトされ、最後にきちんとしたクエリ文字列が提供されることを期待していました。したがって、これらの URL:

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 に答える