Назад | Перейти на главную страницу

Apache RewriteRule игнорирует RewriteCond?

Итак, у меня есть Apache, работающий на OSX Server 10.4 (не спрашивайте) с несколькими сайтами. В 0002_[example.com].conf, У меня есть этот фрагмент кода:

<Directory "/Library/WebServer/Documents/secret/">
    RewriteEngine On
    RewriteCond %{REMOTE_ADDR} !^137\.250\.
    RewriteRule .* /messages/secret.html
</Directory>

Однако в этой конфигурации RewriteCond всегда, кажется, оценивает значение false, поскольку secret каталог отображается, даже если адрес клиента не начинается с 137.250.

Если я изменю конфиг на этот

<Directory "/Library/WebServer/Documents/secret/">
    RewriteEngine On
    RewriteRule .* /messages/secret.html
    RewriteCond %{REMOTE_ADDR} !^137\.250\.
</Directory>

условие либо вообще не оценивается, либо всегда оценивается как истинное. В любом случае, все клиенты блокируются.

Что я делаю не так?

Однако в этой конфигурации RewriteCond всегда кажется ложным, поскольку секретный каталог отображается, даже если адрес клиента не начинается с 137.250.

Конечно, потому что это то, что вы выразили своим RewriteCond! Если вам нужны только клиенты, IP-адреса которых начинаются с 137.250. чтобы увидеть secret.html страницу нужно убрать отрицание (!) в твоем RewriteCond.

Второй опубликованный вами фрагмент изначально неверен. RewriteCond должен предшествовать RewriteRule это относится к.

Было бы проще, если бы вы использовали Allow, Deny и кастом 403 ErrorDocument (видеть Контроль доступа). При использовании молотка mod_rewrite любая проблема начинает выглядеть как гвоздь ...;)