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