Итак, у меня есть 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 любая проблема начинает выглядеть как гвоздь ...;)