このサイトでいくつか検索しましたが、私の質問に対する正しい答えが見つかりませんでした。
wwwリダイレクトを強制し、各URLにエンドスラッシュを強制しようとしています。
htaccessには次の行があります。
# enable rewriting
RewriteEngine on
# if not a file or folder, use index.php
RewriteCond %{SCRIPT_FILENAME} !-f
RewriteCond %{SCRIPT_FILENAME} !-d
RewriteRule ^(.*)$ index.php?url=$1 [L]
# force www
RewriteCond %{HTTP_HOST} !^www
RewriteRule .? http://www.%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
# force endslash
RewriteCond %{REQUEST_URI} !(.*)/$
RewriteRule (.*) %{REQUEST_URI}/ [L,R=301]
私のwwwリダイレクトは正常に機能しています。次のようになります。
http://example.com
to
http://www.example.com
しかし、奇妙な部分は、私の終了スラッシュ行が、不要なurlパラメーターを追加していることです。
したがって、これは次のようになります。
http://www.example.com/path/without/endlash
to
http://www.example.com/index.php/?url=path/without/endslash
この場合、定義したurlパラメーターが使用されるのはなぜですか。これを防ぐにはどうすればよいですか。
前もって感謝します
編集:
icrewに感謝します
endlashエントリの前にno-file/no-dirを追加しただけです。そうしないと、アセットがリダイレクトされるためです。
最終コード:
RewriteCond %{HTTP_HOST} !^www
RewriteRule .? http://www.%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
RewriteCond %{REQUEST_URI} !(.*)/$
RewriteCond %{SCRIPT_FILENAME} !-f
RewriteCond %{SCRIPT_FILENAME} !-d
RewriteCond %{REQUEST_URI} !=/index.php
RewriteRule (.*) %{REQUEST_URI}/ [L,R=301]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php?url=$1 [QSA,L]