回答:
このルールはありませんすべては末尾を追加することです/。存在しない場合は、あなたのURLへと何がある場合は.URIで、そうhttps://example.org/testにリダイレクトされませんhttps://example.org/test/が、https://example.org/test.htmlに書き換えされることはありませんhttps://example.org/test.html/(ただし、注:https://example.org/test.case/folderまたうではないにリダイレクトされhttps://example.org/test.case/folder/、それが含まれているとして.URIのa )。
## Do the following if the URI does not end with `/` or does not contain an `.`:
## the . is relevant for file names like test.html, which should n
RewriteCond %{REQUEST_URI} !(/$|\.)
## Redirect it to the original URI with an added `/` and mark this as permanent:
RewriteRule (.*) %{REQUEST_URI}/ [R=301]
/test.case/folderまたリダイレクトされません」-マイナーなポイントですが、「フォルダ」がファイルシステムディレクトリの場合、mod_dirは(デフォルトで)301リダイレクトを発行して末尾にスラッシュを追加します。/test.case/some-other-virtual-url末尾にスラッシュが必要な場合のみ問題になります。
検証せずに、Apacheリライトでの私の経験を使用すると、この構成は次のようになります。
これにより、次のテストケースが発生します。
/ -> /
/test -> /test/
/my/resource -> /my/resource/
/my/resource.type -> /my/resource.type
/edge.case/resource -> /edge.case/resource
したがって、このルールには、ファイルではないように見えるリソースにスラッシュを追加する目的があると思いますが、エッジケースがあるようです。
そうでない場合、「。」を使用してリソースにスラッシュを追加します。パスのファイル以外の部分の(ドット)文字正規表現は次のように変更する必要があります。
# match paths which do not end with a slash, or do not resemble a file with an extension
RewriteCond %{REQUEST_URI} !(/$|\.[^/]+$)
# redirect permanently to the same uri with a slash
RewriteRule (.*) %{REQUEST_URI}/ [R=301]
!(\/$|\.[^\/]*)-あなたの更新された正規表現は本当に違いはありません。2番目の部分(拡張子と一致する)にも文字列の終わりのアンカーが必要です。おそらく次のようなものです!(/|\.[a-zA-Z]+)$(スラッシュをエスケープする必要はありません)。
/で終わらず、「.」が含まれていない場合は、を追加してリクエストをリダイレクトし/ます。このルールの目的は、自動ディレクトリインデックスを処理することです。