Поддержка Проблемы и решения Вопрос по .htaccess

  • Добрый день.

    1. Есть стандартная установка WordPress
    2. Есть правило .htaccess №1, которое полностью запрещает доступ к файлам .php (для примера)
    2. Есть правило .htaccess №2 от WordPress (создаются после установки)
    4. Настройки постоянных ссылок -> «Название записи»
    5. Создана страница example.com/hello

    Полное содержимое файла .htaccess:
    
    RewriteEngine On
    RewriteBase /
    
    # Правило №1 (запрещаем PHP)
    <IfModule mod_rewrite.c>
    	RewriteCond %{REQUEST_URI} (\.)(php) [NC]
    	RewriteRule .* - [F,L]
    </IfModule>
    
    # Правило №2 (стандартный .htaccess WordPress)
    
    <IfModule mod_rewrite.c>
    	RewriteRule ^index\.php$ - [L]
    	RewriteCond %{REQUEST_FILENAME} !-f
    	RewriteCond %{REQUEST_FILENAME} !-d
    	RewriteRule . /index.php [L]
    </IfModule>

    Если мы переходим на страницу example.com/hello, то срабатывает правило №2 и адрес страницы при помощи RewriteRule превращается в example.com/index.php, затем из-за флага [L] обработка правил прерывается. Далее происходит новый проход с самого начала (т.к. было обнаружено совпадение), но уже с адресом example.com/index.php. Вопрос. Почему при втором проходе не происходит блокировки на правиле №1?

Просмотр 3 ответов — с 1 по 3 (всего 3)
  • Модератор Yuri

    (@yube)

    Далее происходит новый проход с самого начала

    Чего вдруг?

    И вообще RewriteRule не меняет REQUEST_URI.

    Автор rpost

    (@rpost)

    Чего вдруг?

    Если Вы создадите index.html и составите такой .htaccess:

    RewriteEngine on
    RewriteRule cats index.html
    RewriteRule dogs cats

    То при обращении к example.com/dogs у Вас не будет 404 ошибки. У Вас откроется index.html, т.к. после первого совпадения (dogs -> cats) будет второй проход, на котором будет совпадение (cats -> index.html)

    И вообще RewriteRule не меняет REQUEST_URI

    В данном примере я не пытаюсь изменить REQUEST_URI. В этом правиле написано следующее: если запрошенный адрес (REQUEST_URI) содержит .php, то отправляем 403 ошибку (Forbidden).

    Автор rpost

    (@rpost)

    В общем, на Apache работает именно так, как должно — только что проверил. А на LiteSpeed нет — видимо с этим связано. Юрий, спасибо за ответ. Тему можно закрывать.

Просмотр 3 ответов — с 1 по 3 (всего 3)
  • Тема «Вопрос по .htaccess» закрыта для новых ответов.