我正在尝试阻止对网站的所有POST访问(并返回403),除了2个IP和TO网址(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?
我还尝试使用RewriteCond %{REQUEST_URI} !^/about-us/contact-us$
和RewriteCond %{REQUEST_URI} !^/about-us/contact-us/$
之类的相对网址进行变体操作。
我做错了什么?
答案 0 :(得分: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]
答案 1 :(得分:0)
好吧事实证明我尝试它的方式(!^/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
那&#39; L&#39;指定最后一条规则会打破任何进一步的匹配。
我现在拥有的是:
# 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:/
中保存或更改固定链接设置,这将被覆盖