私はWebアプリケーションを継承しましたが、その中には次の.htaccessルールのセットがあります。彼らは何もしていないように私には思えます。誰かが彼らがしていることを説明できますか?
私には、それらが一致しているのはサイトルートへのヒットのみであり、ディレクトリが存在しないかどうかを確認し(!)、301がサイトルートにリダイレクトしているように見えます。
RewriteCond %{REQUEST_URI} /$
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.+)/$ $1 [L,R=301]
OverCoderの答えに追加するだけです...すでに述べたように、このコードはURLの末尾のスラッシュを削除します(ディレクトリを除く)...
_RewriteCond %{REQUEST_URI} /$
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.+)/$ $1 [L,R=301]
_
ただし、ここでの最初のRewriteCond
ディレクティブは実際には不要であり、削除できます。これは、URLがスラッシュで終わっていることを確認するだけです。これは、RewriteRule
pattern(つまり、^(.+)/$
)がすでに確立しているものです。
そして、2番目のRewriteCond
ディレクティブは、ディレクトリを要求していないことを確認します。ディレクトリ必須末尾のスラッシュ。デフォルトでは、mod_dirはappendなしのディレクトリをリクエストした場合、末尾のスラッシュになります。したがって、mod_rewriteを使用してディレクトリの末尾のスラッシュを削除すると、リダイレクトループが作成される可能性があります。
URLの末尾のスラッシュを削除します
例えば。:
https://example.com/welcome/
になります:
https://example.com/welcome
2番目のRewriteCond
は、URLがディスク上の既存のディレクトリ(ファイルなど)と一致しない場合にのみ、ルールが自動的に一致することを指定します。