末尾の複数のスラッシュを削除mod_rewrite
-
27-09-2019 - |
質問
私はこの質問がこのサイトだけで何度も尋ねられたことを知っていますが、関連する投稿を閲覧すると解決策が見つかりませんでした。ドメインの後に複数の末尾のスラッシュを削除しようとしています。次のmod_rewrite式は、次のようなUrlで動作するようです http://www.domain.com//path1///path2////, 、しかし、ドメインのために動作しません//
DirectorySlash Off
RewriteEngine on
# Canonical fix
RewriteCond %{HTTP_HOST} !^www.domain.com$ [NC]
RewriteRule ^(.*)$ http://www.domain.com/$1 [R=301]
RewriteRule ^/main.do http://www.domain.com/ [R=301,L]
RewriteRule ^/index.jsp http://www.domain.com/ [R=301,L]
# Remove bogus query strings
RewriteCond %{query_string} q= [NC]
RewriteRule (.*) http://www.domain.com/$1? [R=301,L]
# Remove multiple slashes after domain - DOESN'T WORK!!!
#RewriteCond %{REQUEST_URI} ^//+(.*)$ [OR]
#RewriteCond %{REQUEST_URI} ^(.*/)/+$
#RewriteRule / http://www.domain.com/%1 [R=301,L]
# Remove multiple slashes anywhere in URL
RewriteCond %{REQUEST_URI} ^(.*)//(.*)$
RewriteRule . %1/%2 [R=301,L]
# Externally redirect to get rid of trailing slash except for home page, ads
RewriteCond %{REQUEST_URI} !^/ads/
RewriteRule ^(.+)/$ $1 [R=301,L]
解決
再現できません。DirectorySlashesがオフの場合でも、ドメインの直後の余分なスラッシュがmod_rewriteに渡されることはありません。スラッシュを削除しているのがOperaかApacheかは確認していません)。それ以外の場合は、すべて正常に機能します: ジェネラコディセタグプレ
http:// localhost // abc / b // のリクエスト ジェネラコディセタグプレ
注:ホストをハードコーディングしないことを検討してください: ジェネラコディセタグプレ
また、内側の「//」は置き換えられていないことに注意してください。内側のスラッシュを置き換える別のルールを追加します。
新しい編集: OK、これは//で始まるまたは終わるURLを防ぐために機能するようです: ジェネラコディセタグプレ
他のヒント
あなたはApacheに最初のスラッシュを含むすべてをmap1にマップするように言っています
RewriteRule ^(.*)$ domain/$1 [R=301]
RewriteRule (.*) domain/$1? [R=301,L]
RewriteRule ^(.+)/$ $1 [R=301,L]
キャレットの後にスラッシュを追加するか、ドメイン名の後にドロップします
これが機能しているように見える完全なリストです: ジェネラコディセタグプレ
これは、リダイレクトを送信する前にすべてのスラッシュを削除します ジェネラコディセタグプレ
次のコードは、ドメインの後の余分なスラッシュを含むすべての余分なスラッシュを削除します。 ジェネラコディセタグプレ