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

Regex 如何在Apache 2.4上重定向多个CIDR块,regex,apache,.htaccess,Regex,Apache,.htaccess,我需要拒绝所有用户的访问,除了通过几个特定IP范围(CDN)的用户。但是,我需要将我的子域的“www”版本从该规则中排除,因为“www”版本需要绕过CDN(由于固有的限制)。我希望使用(或更高版本)以最简洁/简单的方式完成此操作。大概是这样的: RewriteCond %{HTTP_HOST} !^www\.(.*)\.example\.com$ [NC] RewriteCond expr "! -R '(12.345.678.90/28|09.876.543.21/28)'" RewriteR

我需要拒绝所有用户的访问,除了通过几个特定IP范围(CDN)的用户。但是,我需要将我的子域的“www”版本从该规则中排除,因为“www”版本需要绕过CDN(由于固有的限制)。我希望使用(或更高版本)以最简洁/简单的方式完成此操作。大概是这样的:

RewriteCond %{HTTP_HOST} !^www\.(.*)\.example\.com$ [NC]
RewriteCond expr "! -R '(12.345.678.90/28|09.876.543.21/28)'"
RewriteRule ^ - [F]
我猜这是由于不正确的语法造成的,目前正在导致服务器错误。

以下是在原始问题的上下文中使用重写规则重定向多个CIDR块的正确(也是最有效)语法(谢谢@Deadooshka!):


%{REMOTE\u HOST}
不正确,应该是
%{HTTP\u HOST}
,但这不会导致500错误。检查您的错误日志,看看是什么原因造成的。确保启用了“修改重写”。您好@Capsule,谢谢您的建议!我可以确认
mod_rewrite
已启用。下面是错误日志的相关输出(替换了一些值以匹配上面的示例):
[Sun Jun 18 18:49:34.496813 2017][core:alert][pid 9894][client 198.xx.xx.xx:53119]/home/sitename/public_html/.htaccess:RewriteCond:cannot compile expression“-R”(12.345.678.90/28 | 09.876.543.21/28)”:分析子网/网络掩码失败,请参阅:http://example.com/
也许是这样的
expr“!-R'12.345.678.90/28'&&!-R'9.876.543.21/28'
谢谢@Deadooshka!这似乎非常接近。我不再得到500的错误。然而,这种特殊的方法似乎要求正确的IP范围在列表中排在第一位。如果不是第一次,我会得到“禁止”错误。因此,它没有将范围划分为适当的“或”语句。显然,在任何给定的时间都不知道CDN将使用哪个IP。最后,这是:
expr!(-R'127.0.0.0/8'|-R'192.0.0.0/8')“
RewriteCond %{HTTP_HOST} !^www\.(.*)\.example\.com$ [NC]
RewriteCond expr "!(-R '127.0.0.0/8' || -R '192.0.0.0/8')"
RewriteRule ^ - [F]