如何配置mod_rewrite来检查直接IP和代理IP?

时间:2017-10-25 15:13:17

标签: wordpress apache .htaccess mod-rewrite

我正在尝试配置我们的wordpress .htaccess文件,以便它阻止访问wordpress wp-login.php和管理页面,除非客户端来自我们的网络。

dev环境是可以直接访问的,但是生产是在代理之后,所以为了简单起见,我想配置一套适用于这两种情况的规则。

根据我的研究,我已经配置了以下规则集:

#only allow use of wp-login or wp-admin from users inside
RewriteCond %{REQUEST_URI} ^(.*)?wp-login\.php(.*)$ [OR]
RewriteCond %{REQUEST_URI} ^(.*)?wp-admin$
RewriteCond %{REMOTE_ADDR} !^192\.168\.(1|2|3|4)\.[0-9]{1,3}$            [OR]
RewriteCond %{HTTP:X-FORWARDED-FOR} !^192\.168\.(1|2|3|4)\.[0-9]{1,3}$
RewriteRule ^(.*)$ - [R=403,L]

但是,出于某种原因,REMOTE_ADDR和X-FORWARDED-FOR之间的[OR]似乎被忽略,导致页面在所有情况下都被阻止。

我错过了什么吗?

编辑:我不应该开始使用OR条件。显然,我的大脑没有足够的咖啡来计算基本的二元操作。

1 个答案:

答案 0 :(得分:1)

我认为您的客户通过代理或直接连接。由于如果EITHER不匹配,您将阻止它们,您很可能会阻止它们。通过本地代理来的人应该通过。我不会在.htacces中使用XFF-stuff,如果可能请使用mod_remoteip,并且只信任自己的代理,因为客户端很容易欺骗该标头。

此外,wp-admin行中的$表示它与wp-admin / edit.php不匹配。考虑一下WP ajax请求通过wp-admin / admin-ajax.php,你可能需要这些。