web-dev-qa-db-ja.com

この.htaccessルールセットが何をしているのかわからない

私はWebアプリケーションを継承しましたが、その中には次の.htaccessルールのセットがあります。彼らは何もしていないように私には思えます。誰かが彼らがしていることを説明できますか?

私には、それらが一致しているのはサイトルートへのヒットのみであり、ディレクトリが存在しないかどうかを確認し(!)、301がサイトルートにリダイレクトしているように見えます。

RewriteCond %{REQUEST_URI} /$
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.+)/$ $1 [L,R=301]
1
e_i_pi

OverCoderの答えに追加するだけです...すでに述べたように、このコードはURLの末尾のスラッシュを削除します(ディレクトリを除く)...

_RewriteCond %{REQUEST_URI} /$
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.+)/$ $1 [L,R=301]
_

ただし、ここでの最初のRewriteCondディレクティブは実際には不要であり、削除できます。これは、URLがスラッシュで終わっていることを確認するだけです。これは、RewriteRulepattern(つまり、^(.+)/$)がすでに確立しているものです。

そして、2番目のRewriteCondディレクティブは、ディレクトリを要求していないことを確認します。ディレクトリ必須末尾のスラッシュ。デフォルトでは、mod_dirはappendなしのディレクトリをリクエストした場合、末尾のスラッシュになります。したがって、mod_rewriteを使用してディレクトリの末尾のスラッシュを削除すると、リダイレクトループが作成される可能性があります。

2
MrWhite

URLの末尾のスラッシュを削除します

例えば。:

https://example.com/welcome/

になります:

https://example.com/welcome

2番目のRewriteCondは、URLがディスク上の既存のディレクトリ(ファイルなど)と一致しない場合にのみ、ルールが自動的に一致することを指定します。

2
OverCoder