htaccess обнаружил странность

Доброго дня.
Странную штуку обнаружил.

Уж так сложилось, что не люблю я когда на конце страницы отображается ".html" и слеш у контейнеров "/"

Посему убрал расширение «html» у страниц и слеш у контейнеров.

Теперь к .htaccess

В нем расскомментировал:

# Rewrite www.domain.com -> domain.com -- used with SEO Strict URLs plugin
RewriteCond %{HTTP_HOST} .
RewriteCond %{HTTP_HOST} !^site\.ru [NC]
RewriteRule (.*) http://site.ru/$1 [R=301,L]

И добавил переадресацию со страницы со слешем на конце, что бы не было ложных срабатываний 404

RewriteRule ^(manager)/*$ - [L] # exclude manager folder
RewriteCond %{REQUEST_URI} (.*)/
RewriteRule ^(.*)/$ http://site.ru/$1 [R=301,L]

И вот тут то самое интересное!!!!!!

Как только добавляю переадресацию со страницы со слешем на конце. В админке перестает отображаться содержимое вкладки ФАЙЛЫ




Как только убираю из .htaccess переадресацию со страницы со слешем на конце. Все содержимое вкладки «ФАЙЛЫ» появляется.

Подскажите что за дела такие?
Евгений
10 ноября 2014, 17:58
modx.pro
1
2 535
0

Комментарии: 7

Василий Наумкин
11 ноября 2014, 05:22
0
А ты подумай, нет ли в работе файловой системы таких штук, имена которых заканчиваются на слэш? Например, директорий?

А вдруг (ну просто, в порядке бреда), твой редирект может как-то помешать открыть директорию /assets/, например?
    Евгений
    11 ноября 2014, 07:47
    0
    Смириться и жить без редиректа?
      Aртур Чикин
      11 ноября 2014, 08:27
      0
      А может написать для каждой папки в корне свой .htaccess?)
        Василий Наумкин
        11 ноября 2014, 08:29
        0
        Как хочешь.

        Можно сделать это через плагин на загрузку web страницы, тогда он будет работать только когда нужно.
      Алексей Карташов
      11 ноября 2014, 12:13
      +1
      Ну как бы это… Не правильно жеж настроено.
      У тебя переадресация идёт абсолютно для любых адресов, а тебе надо только для несуществующих.
      Изначально смысл такой — если папка или директория физически на сервере не существует, то этот адрес отправляется в index.php в get-параметре «q», и этот параметр уже обрабатывает сам modx (ищет этот урл среди ресурсов).

      Вот эти строки оригинальном htaccess'е, который идёт вместе с modx (1):
      RewriteCond %{REQUEST_FILENAME} !-f # файл на сервере физически не существует
      RewriteCond %{REQUEST_FILENAME} !-d # директория на сервере физически не существует
      RewriteRule ^(.*)$ index.php?q=$1 [L,QSA] # отправляем этот адрес в точку входа modx

      Так вот этот приём и нужно использовать (2):
      RewriteCond %{REQUEST_FILENAME} !-f # файл на сервере физически не существует
      RewriteCond %{REQUEST_FILENAME} !-d # директория на сервере физически не существует
      RewriteCond %{REQUEST_URI} (.*)/ # проверяем, что есть слэш на конце урл
      RewriteRule ^(.*)/$ http://site.ru/$1 [R=301,L] #делаем редирект
      И уже не нужно писать отдельные условия-исключения для всяких там папок, типа 'manager', 'assets' и всех других.

      Строки (2) нужно вставить перед строками (1), иначе апач отдаст строку с урл в index.php и до редиректа дело не дойдёт.

      p.s. и да, я не тестировал, пишу по памяти ибо последний раз htaccess настраивал с год назад. Но вроде должно работать. Переходите на nginx :-)
        Евгений
        11 ноября 2014, 13:46
        0
        Искреннее ОГРОМНОЕ человеческое спасибо, за столь подробное обьяснение, все работает
      Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.
      7