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]
Просто чтобы добавить к ответу OverCoder ... как уже говорилось, этот код удаляет косую черту в конце URL-адреса (кроме каталогов) ...
RewriteCond %{REQUEST_URI} /$
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.+)/$ $1 [L,R=301]
Однако первый Директива RewriteCond
здесь действительно лишняя и ее можно удалить. Это просто проверяет, заканчивается ли URL косой чертой, что уже установлено шаблоном RewriteRule
(т.е. ^ (. +) / $
).
А вторая директива RewriteCond
гарантирует, что мы не запрашиваем каталог. Каталог требует завершающей косой черты. По умолчанию mod_dir добавит косую черту в конце, если вы запрашиваете каталог без. Итак, если вы удалите завершающую косую черту в каталогах с помощью mod_rewrite, вы, вероятно, создадите цикл перенаправления.
Удаляет косую черту в конце любого URL-адреса
, например:
https://example.com/welcome/
становится:
https://example.com/welcome
Второй RewriteCond
указывает, что правило выполняется только тогда, когда URL-адрес не соответствует существующему каталогу на диске (например, это может быть файл), конечно, автоматически.