У меня есть это в моем htaccess, но я не могу понять, для чего это нужно. Из-за природы правила поиск тоже не помогает.
RewriteCond %{REQUEST_URI} !(/$|\.)
RewriteRule (.*) %{REQUEST_URI}/ [R=301]
Кто-нибудь может объяснить, для чего это нужно?
linux
apache-2.2
apache-2.4
.htaccess
mod-rewrite
Richard1984
источник
источник
/
а» и не содержит «.
», то перенаправьте запрос, добавив его с «/
. Вероятное намерение этого правила - обработать автоматическую индексацию каталога.Ответы:
Все, что делает это правило, - это добавление в конце
/
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).источник
/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
Поэтому я думаю, что правило имеет целью добавить косые черты к ресурсам, которые не кажутся файлами, но, похоже, имеют пограничный случай.
Если не добавить косую черту к ресурсу с помощью «.» (точка) символ в не файловой части пути, регулярное выражение должно быть изменено на:
источник
!(\/$|\.[^\/]*)
- Ваше обновленное регулярное выражение действительно ничем не отличается. Вам также понадобится привязка конца строки во второй части (которая соответствует расширению). Возможно, что-то вроде:!(/|\.[a-zA-Z]+)$
(не нужно избегать слэшей).