回答:
このルールはありませんすべては末尾を追加することです/
。存在しない場合は、あなたの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]+)$
(スラッシュをエスケープする必要はありません)。
/
で終わらず、「.
」が含まれていない場合は、を追加してリクエストをリダイレクトし/
ます。このルールの目的は、自動ディレクトリインデックスを処理することです。