#.htaccess #mod-rewrite
#.htaccess #мод-перезапись
Вопрос:
Я пытаюсь заблокировать весь почтовый доступ к сайту (и вернуть 403), за исключением 2 IP-адресов и одного URL-адреса (http://mydomain.com/about-us/contact-us /).
Вот что у меня есть:
RewriteCond %{REQUEST_METHOD} POST
RewriteCond %{REMOTE_ADDR} !=1.2.3.4
RewriteCond %{REMOTE_ADDR} !=4.3.2.1
RewriteCond %{REQUEST_URI} !^http://mydomain.com/about-us/contact-us/$
RewriteRule ^ / [F]
Эти правила разрешают доступ со всех IP-адресов должным образом, но страница контактов по-прежнему недоступна. Я не уверен, что правильно использую REQUEST_URI ?
Я также пробовал варианты с относительными URL-адресами, например RewriteCond %{REQUEST_URI} !^/about-us/contact-us$
, и RewriteCond %{REQUEST_URI} !^/about-us/contact-us/$
без удачи.
Что я делаю не так, пожалуйста?
Комментарии:
1. Правильный способ его использования заключается в следующем:
RewriteCond %{REQUEST_URI} !^/about-us/contact-us/$
. Это должно работать так, как ожидалось, должна быть другая проблема
Ответ №1:
Мне кажется, что ваше правило для имени файла слишком специфично. Если вы немного расслабите его, это должно сработать. Я внес несколько других эстетических изменений.
Попробуйте:
RewriteCond %{REQUEST_METHOD} POST
RewriteCond %{REMOTE_ADDR} !^1.2.3.4
RewriteCond %{REMOTE_ADDR} !^4.3.2.1
RewriteCond %{REQUEST_URI} !about-us/contact-us
RewriteRule ^ - [F]
Ответ №2:
Хорошо, оказывается, что способ, которым я пробовал это ( !^/about-us/contact-us$
), БЫЛ правильным, но сгенерированные WordPress правила .htaccess для постоянных ссылок либо останавливали его работу, либо переопределяли его. Итак, спасибо Justing и zx81 за подтверждение правильности общего метода.
Для всех, кто еще сталкивается с этой проблемой, WordPress добавит следующие правила (на момент написания на WordPress v3. *), когда будут включены постоянные ссылки:
# BEGIN WordPress
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteRule ^index.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>
# END WordPress
Это ‘L’, обозначающее ПОСЛЕДНЕЕ правило, нарушает любое дальнейшее сопоставление.
Теперь у меня есть:
# BEGIN WordPress
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteRule ^index.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php
RewriteCond %{REQUEST_METHOD} POST
RewriteCond %{REMOTE_ADDR} !=1.2.3.4
RewriteCond %{REMOTE_ADDR} !=4.3.2.1
RewriteCond %{REQUEST_URI} !^/about-us/contact-us/$
RewriteRule ^ / [F]
</IfModule>
# END WordPress
…и это работает так, как планировалось. Конечно, это будет перезаписываться всякий раз, когда настройки постоянных ссылок сохраняются или изменяются в WP admin :/