Исключить слово в regex .htaccess

LovelAss
На сайте с 05.06.2009
Offline
96
2225

Здравствуйте, уважаемые форумчане!

Есть файл .htaccess в котором все url без слэша на конце перенаправляются на адрес со слэшем:


RewriteCond %{REQUEST_URI} ^(.+[^/])$
RewriteRule ^.+[^/]$ http://%{HTTP_HOST}%1/ [R=301,L]

Нужно исключить из этого правила админку, то есть все адреса, которые начинаются с /admin

Помогите с составлением регулярки, уже всю голову поломал. Пробовал через (?!/admin) - сервер выдаёт 500-ую ошибку.

siv1987
На сайте с 02.04.2009
Offline
427
#1

RewriteCond в данном случае не особо и нужен, он выполняют ту же функцию что и RewriteRule

RewriteRule ^(?!admin|other_folder)(.+[^/])$ http://%{HTTP_HOST}/$1/ [R=301,L]

LovelAss
На сайте с 05.06.2009
Offline
96
#2

siv1987, спасибо. Да, действительно RewriteCond здесь не нужен. На локальном сервере такая конструкция отлично работает, а вот на сервере клиента выдаёт 500-ую ошибку почему-то. Зато конструкция без знака вопроса в начале (!admin|other_folder) работает отлично. Мистика, да и только!

siv1987
На сайте с 02.04.2009
Offline
427
#3

Должно работать везде, это не такое уж специфичное выражение. Может еще что-то помимо этого есть, что заставляет правила зацикливаться? Или где-то ошиблись.. В логах сервера ничего нету?

IL
На сайте с 20.04.2007
Offline
435
#4

Эм.. а если чуть выше добавить "пустышку" для админки? Так примерно:


#игнорим админку.. логично добавить каталоги /css/ /js/ итд
RewriteRule ^(admin|other_folder)/ - [L]
#добавляем закрывающий слэш
RewriteRule ^(.+[^/])$ http://%{HTTP_HOST}/$1/ [R=301,L]
... :) Облачные серверы от RegRu - промокод 3F85-3D10-806D-7224 ( http://levik.info/regru )
bon_eur
На сайте с 09.06.2012
Offline
40
#5

Подозреваю, что на сайте все же есть урлы, к которым не надо добавлять слэш на конце. Картинки, стили, реальные html-файлы...

Тогда я бы сделал так:

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_URI} !(^/admin|/$)
RewriteRule .+ /$0/ [R=301,L]

Если нет файла по такому адресу И

если адрес начинается не с /admin и заканчивается не на слэш,

то добавлять в конце слэш.

Проверяйте, у меня работает нормально.

P.S. Если предположение насчет картинок, стилей и реальных файлов - неверное, то просто удалите первую строку приведенного выше кода.

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий