У меня есть это в моем htaccess, но я не могу понять, для чего это нужно. Из-за природы правила поиск тоже не помогает.
RewriteCond %{REQUEST_URI} !(/$|\.)
RewriteRule (.*) %{REQUEST_URI}/ [R=301]
Кто-нибудь может объяснить, для чего это нужно?
Все, что делает это правило, - добавляет конечный /
к вашим 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).
## 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]
Без проверки, но с учетом моего опыта переписывания 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]