0

このサイトでいくつか検索しましたが、私の質問に対する正しい答えが見つかりませんでした。

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]
4

1 に答える 1

1

.htaccessのこの部分

RewriteCond %{SCRIPT_FILENAME} !-f
RewriteCond %{SCRIPT_FILENAME} !-d
RewriteRule ^(.*)$ index.php?url=$1 [L]

http://www.example.com/index.php/?url=path/without/endslashリダイレクトを担当します。したがって、基本的に、クエリ文字列にurlパラメータが必要ない場合は、これらの3行を削除してください。

編集:私はあなたが何を望んでいたかを理解します。ベローは正しいコードです

# enable rewriting
RewriteEngine on

# force www
RewriteCond %{HTTP_HOST} !^www
RewriteRule .? http://www.%{HTTP_HOST}%{REQUEST_URI} [L,R=301]

# force endslash
RewriteCond %{REQUEST_URI} !(.*)/$
#next row prevent redirection if final rewriting is done
RewriteCond %{REQUEST_URI} !=/index.php 
RewriteRule (.*) %{REQUEST_URI}/ [L,R=301]

# if not a file or folder, use index.php
RewriteCond %{SCRIPT_FILENAME} !-f
RewriteCond %{SCRIPT_FILENAME} !-d
#QSA because I suppose you dont want to discard the existing query string. Remove QSA if you want to discard
RewriteRule ^(.*)$ index.php?url=$1 [QSA,L]
于 2012-11-11T12:55:01.543 に答える