У меня тут небольшие проблемы. У меня есть несколько правил перезаписи, которые, как мне кажется, не работают.
Моя основная цель - ограничить страницы и разрешить только определенный IP или блокировку сети.
RewriteEngine On
RewriteLog "/data/wre/var/logs/modrewrite.log"
RewriteLogLevel 5
RewriteCond %{REMOTE_ADDR} !^192\.168\.10\..*
RewriteCond %{REMOTE_ADDR} !^72\.139\.201\..*
RewriteCond %{REMOTE_ADDR} !^129\.233\.4\..*
RewriteCond %{REMOTE_ADDR} !^208\.118\.97\32
RewriteRule ^/solutions https://example.com/account/signin?go=outside [R,NE,NC]
Я проверил это снова, и кажется, что это не работает? Я что-то не так сделал?
Попробуй это:
RewriteEngine On
RewriteLog "/data/wre/var/logs/modrewrite.log"
RewriteLogLevel 5
RewriteCond %{REMOTE_ADDR} ^192\.168\.10\..* [OR]
RewriteCond %{REMOTE_ADDR} ^72\.139\.201\..* [OR]
RewriteCond %{REMOTE_ADDR} ^129\.233\.4\..* [OR]
RewriteCond %{REMOTE_ADDR} ^208\.118\.97\.32
RewriteRule ^/solutions https://example.com/account/signin?go=outside [NE,NC,R=301]
Обратите внимание, что несколько директив RewriteCond неявно объединяются оператором И., вам необходимо указать, следует ли вместо этого использовать операцию ИЛИ. Если вы хотите, чтобы браузер запомнил перенаправление, указание постоянного перенаправления может сэкономить некоторую будущую обработку.
В зависимости от вашей конфигурации может быть проще указать известные хорошие диапазоны и перенаправить для всех остальных. Из руководства по перенаправлению иностранцев: Руководство по Apache
RewriteEngine on
RewriteCond %{REMOTE_HOST} !^.+\.ourdomain\.com$
RewriteRule ^/solutions https://example.com/account/signin?go=outside [NE,NC,R=301]
Похоже, вы создаете завесу (стену для входа в систему, платную стену или завесу для обслуживания и т. Д.), До которой могут добраться все, кроме нескольких диапазонов IP в Интернете.
Вот что я сделал для создания такой конфигурации:
# This implements a maintenance curtain; only these three IPs
# can look behind the curtain. Note its useful to allow the box
# itself too.
#
RewriteEngine On
RewriteCond %{REMOTE_ADDR} !127.0.0.1
RewriteCond %{REMOTE_ADDR} !123.234.45.6
RewriteCond %{REMOTE_ADDR} !123.234.45.78
RewriteCond %{REQUEST_URI} !^/maintenance-curtain/.*
RewriteRule / / [L,R=503]
ErrorDocument 503 /maintenance-curtain/index.html
ProxyPass /maintenance-curtain !
Alias /maintenance-curtain /var/www/maintenance-curtain
И это действительно похоже на ваше. Я предлагаю вам сначала упростить и протестировать только один IP. Если остальное, если ваша конфигурация довольно сложна, это может мешать, поэтому попробуйте доказать это в меньшем контексте или переместите его раньше в конфигурации. Мешают ли виртуальные хосты; вам нужно реплицировать конфигурацию (используйте Include
если вам нужно это сделать).
Однако я скажу, что я (я думаю) знал, что такие вещи, как REMOTE_ADDR, не должны быть установлены в случае, когда какой-либо другой модуль не включен ... прошло некоторое время с тех пор, как я обнаружил такое поведение ... включен ли cgi_module?
Прикс, я действительно слежу за этим.
http://www.the-art-of-web.com/system/rewrite/
Conversely, you may want to allow only certain IP addresses to access the site:
RewriteCond %{REMOTE_ADDR} !^12\.34\.56\.78$
RewriteCond %{REMOTE_ADDR} !^87\.65\.43\.21$
RewriteCond %{REQUEST_URI} !^sorry\.html
RewriteRule .* /sorry.html
Translation:
IF their IP address is not 12.34.56.78
AND their IP address is not 87.65.43.21
AND the request is not for sorry.html
THEN display the sorry.html page
Этот 2 должен быть установлен либо в VirtualHost
или Directory
проработать:
RewriteLog "/data/wre/var/logs/modrewrite.log"
RewriteLogLevel 5
Вы можете попробовать то, что хотите, вот так:
RewriteCond %{REMOTE_ADDR} ^192\.168\.10\. [OR]
RewriteCond %{REMOTE_ADDR} ^72\.139\.201\. [OR]
RewriteCond %{REMOTE_ADDR} ^129\.233\.4\. [OR]
RewriteCond %{REMOTE_ADDR} ^208\.118\.97\.32$
что будет переводить на:
Возможно, я неправильно понимаю, что вы хотите сделать, но если я понимаю, что вы пытаетесь сделать, похоже, что вы делаете невероятно сложным образом.
Если это для всего сайта или всего каталога, почему бы просто не использовать директиву allow в каталоге раздела virtualhost, если это необходимо?
http://httpd.apache.org/docs/2.2/mod/mod_authz_host.html#allow
И установите для страницы ошибки 403 значение be sorry.html. http://httpd.apache.org/docs/2.2/mod/core.html#errordocument
Так что-то вроде:
<directory "/path/to/content/" >
Order Allow,Deny
Allow 192.168.0.0/255.255.0.0 # allow everyone from the 192.168.0.0/255.255.0.0 network
# every one else gets denied (default for stuff that has not matched is to the
# last clause of the Order directive
# the error document for a 403 (forbidden) is the sorry.html page
ErrorDocument 403 /sorry.html
</directory>