web-dev-qa-db-ja.com

.htaccessの1つの301で複数の末尾のスラッシュを削除しますか?

同様の質問 here がありますが、このソリューションはApacheのサイトでは機能しません。

サイトのURLから複数の末尾のスラッシュを削除しようとしています。動作していると思われる.htaccessコードがいくつか見つかりました。

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_URI} ^(.*)//(.*)$
RewriteRule . %1/%2 [R=301,L]

このルールは、URLの任意の場所から複数のスラッシュを削除します。

http://www.mysite.com/category/accessories////
becomes
http://www.mysite.com/category/accessories/

ただし、余分なスラッシュごとに1回リダイレクトされます。そう:

http://www.mysite.com/category/accessories///////
301 Redirects to
http://www.mysite.com/category/accessories//////
301 Redirects to
http://www.mysite.com/category/accessories/////
301 Redirects to
http://www.mysite.com/category/accessories////
301 Redirects to
http://www.mysite.com/category/accessories///
301 Redirects to
http://www.mysite.com/category/accessories//
301 Redirects to
http://www.mysite.com/category/accessories/

単一の301リダイレクトですべてを実行するようにこのルールを書き換えることは可能ですか?

また、上記のディレクティブは、サイトのルートレベルでは機能しません。

http://www.mysite.com///// does not redirect but it should.
3
Jake Wilson

スラッシュがURLの最後にのみ発生する場合は、これを使用できます

RewriteCond %{REQUEST_URI} ^(.*?)(?:/){2,}$
RewriteRule . $1/ [R=301,L]
4
PatomaS
RewriteEngine on
RewriteBase /
RewriteCond %{HTTP_Host} !=""
RewriteCond %{THE_REQUEST} ^[A-Z]+\s//+(.*)\sHTTP/[0-9.]+$ [OR]
RewriteCond %{THE_REQUEST} ^[A-Z]+\s(.*/)/+\sHTTP/[0-9.]+$
RewriteRule .* http://%{HTTP_Host}/%1 [R=301,L]
1
Maxim Oliynyk