如何在Apache 2.4上重定向多个CIDR块

时间:2017-06-18 21:57:51

标签: regex apache .htaccess

我需要拒绝所有用户的访问权限,但通过几个特定IP范围(CDN)的用户除外。但是,我需要从此规则中排除子域的“www”版本,因为“www”版本需要绕过CDN(由于固有的限制)。我想使用syntax available with Apache HTTPD 2.4(或更晚)以最简洁/最简单的方式做到这一点。像这样:

RewriteCond %{HTTP_HOST} !^www\.(.*)\.example\.com$ [NC]
RewriteCond expr "! -R '(12.345.678.90/28|09.876.543.21/28)'"
RewriteRule ^ - [F]

这正在导致服务器错误,我猜是因为语法不正确。

1 个答案:

答案 0 :(得分:1)

这是在原始问题的上下文中使用RewriteRule重定向多个CIDR块的正确(且最有效)的语法(感谢@Deadooshka!):

RewriteCond %{HTTP_HOST} !^www\.(.*)\.example\.com$ [NC]
RewriteCond expr "!(-R '127.0.0.0/8' || -R '192.0.0.0/8')"
RewriteRule ^ - [F]