Обратите внимание на следующее:
RewriteCond %{REMOTE_ADDR} !^1\.2\.3\.4
RewriteCond %{REMOTE_ADDR} !^1\.2\.3\.5
RewriteCond %{QUERY_STRING} ^q=user
RewriteRule .* /denied/from/this/ip [F,L]
RewriteCond %{REMOTE_ADDR} !^1\.2\.3\.4
RewriteCond %{REMOTE_ADDR} !^1\.2\.3\.5
RewriteCond %{REQUEST_URI} ^/user
RewriteRule .* /denied/from/this/ip [F,L]
Это файл htaccess в системе cPanel, работающей под управлением Ubuntu, Apache 2.4.41, и в системе на основе PHP / Drupal. Сценарий в основном говорит, что если вы обращаетесь к пользователю / пользователю или пользователю по приведенной выше строке запроса и не используете один из этих IP-адресов, то вам запрещено.
В моей автономной системе Ubuntu оба они работают безупречно, и мы получаем стандартную «Запрещенную» страницу. Однако в cPanel первый блок правил, использующий QUERY_STRING, возвращается на домашнюю страницу, тогда как второй блок правил просто продолжает и загружает пользовательскую «папку».
Я затрудняюсь объяснить разницу в двух вариантах поведения.
Если я добавлю R = 302 к концу флагов RewriteRule, то поймаю цикл Apache, сообщающий, что страница была перемещена, нажмите «здесь» , где здесь возвращает меня к "/user".
Так что я знаю, что RewriteCond совпадают, и, конечно, мы получаем 403 в журнале доступа apache. Это почти как игнорирование перенаправления RewriteRule или игнорирование запрещенного флага, или обоих.