Unsure what this .htaccess set of rules is doing

I've inherited a web application, and in it is the following set of .htaccess rules. It appears to me that they do nothing. Can someone explain what they're doing?

To me, it looks like they're matching only hits to the site root, checking if the directory doesn't exist (!), and then 301 redirecting to the site root.

RewriteCond %{REQUEST_URI} /$
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.+)/$ $1 [L,R=301]
1
задан 21 June 2017 в 03:33
2 ответа

Просто чтобы добавить к ответу OverCoder ... как уже говорилось, этот код удаляет косую черту в конце URL-адреса (кроме каталогов) ...

RewriteCond %{REQUEST_URI} /$
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.+)/$ $1 [L,R=301]

Однако первый Директива RewriteCond здесь действительно лишняя и ее можно удалить. Это просто проверяет, заканчивается ли URL косой чертой, что уже установлено шаблоном RewriteRule (т.е. ^ (. +) / $ ).

А вторая директива RewriteCond гарантирует, что мы не запрашиваем каталог. Каталог требует завершающей косой черты. По умолчанию mod_dir добавит косую черту в конце, если вы запрашиваете каталог без. Итак, если вы удалите завершающую косую черту в каталогах с помощью mod_rewrite, вы, вероятно, создадите цикл перенаправления.

2
ответ дан 3 December 2019 в 17:35

Удаляет косую черту в конце любого URL-адреса

, например:

https://example.com/welcome/

становится:

https://example.com/welcome

Второй RewriteCond указывает, что правило выполняется только тогда, когда URL-адрес не соответствует существующему каталогу на диске (например, это может быть файл), конечно, автоматически.

2
ответ дан 3 December 2019 в 17:35

Теги

Похожие вопросы