Я маю це у своєму htaccess, але не можу зрозуміти, для чого це потрібно. Через природу правила пошук також не допомагає.
RewriteCond %{REQUEST_URI} !(/$|\.)
RewriteRule (.*) %{REQUEST_URI}/ [R=301]
Хто-небудь може пояснити, для чого це?
Я маю це у своєму htaccess, але не можу зрозуміти, для чого це потрібно. Через природу правила пошук також не допомагає.
RewriteCond %{REQUEST_URI} !(/$|\.)
RewriteRule (.*) %{REQUEST_URI}/ [R=301]
Хто-небудь може пояснити, для чого це?
Відповіді:
Все це правило полягає в тому, щоб додати /
URL-адресу в останню 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/
, що вона містить a .
в 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]
!(\/$|\.[^\/]*)
- Ваш оновлений регекс насправді не відрізняється. Вам також потрібен кінцевий якор на 2-й частині (що відповідає розширенню). Можливо, щось на кшталт: !(/|\.[a-zA-Z]+)$
(не потрібно бігти від косих).
/
і не містить ".
", то перенаправляйте запит, додавши його з a/
. Ймовірним наміром цього правила є обробка автоматичної індексації каталогів.