У меня есть это в моем 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, эта конфигурация выглядит так:
Это приведет к результат в следующих тестовых случаях
/ -> /
/ тест -> / тест /
/ мой / ресурс -> / мой / ресурс /
/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]