Answers:
此规则的全部作用是/
,如果.
URI中没有尾部且URI中没有尾部,则将尾部添加到您的URL中,因此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)。
## 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]
!(\/$|\.[^\/]*)
-您更新的正则表达式确实没有什么不同。您还需要在第二部分(与扩展名匹配)上使用字符串结尾锚。也许是这样的:(!(/|\.[a-zA-Z]+)$
无需转义斜线)。
/
以“ a” 结尾并且不包含“.
”,则通过在请求后面附加一个来重定向请求/
。该规则的可能目的是处理自动目录索引。