所以我刚刚实现了AWS' CloudFront,我需要从一些htaccess规则中豁免他们的IP范围。以下是其范围的链接:https://forums.aws.amazon.com/ann.jspa?annID=910
以下是我不希望他们使用的htaccess规则的示例:
# ROUTE CLOUDFRONT DOMAINS
rewritecond %{HTTP_HOST} ^www1.
rewriterule ^ http://www.domain.com%{REQUEST_URI} [L,R=301]
如何编写另一个重写[或倍数]以忽略204.246.160.0/19范围?
答案 0 :(得分:2)
您可以阻止(或允许)IP地址范围,如下所示:
# block a range of IPs
RewriteCond %{REMOTE_ADDR} =204\.246\.160\.([0-9]|1[0-9])
RewriteRule ^ - [F,L]
特别针对您现有的规则,您可以使用:
# if domain name has www1 at start
RewriteCond %{HTTP_HOST} ^www1\. [NC]
# but request not coming from 204.246.160.0/19 IP range
RewriteCond %{REMOTE_ADDR} !=204\.246\.160\.([0-9]|1[0-9])
# redirect to http://www.domain.com/uri
RewriteRule ^ http://www.domain.com%{REQUEST_URI} [L,R=301]
答案 1 :(得分:2)
如果我的数学是正确的那么204.246.160.0/19是204.246.160。*通过204.246.191。*所以匹配它的正则表达式是204\.246\.1([678]\d|19[01]\.\d+
因此cond是
RewriteCond %{REMOTE_ADDR} !204\.246\.1([678]\d|19[01])\.\d+
当你的意思是[09]和“。”时,你的正则表达式中有一些非重大错误,如[0,9]。代替 ”。”。但你可以假设IP地址是有效的,所以你可以简化这些,这是我提出的最简单的:
#Filter the 204.246.160.0/19 and 216.137.32.0/19 IP subranges
RewriteCond %{REMOTE_ADDR} !^(204\.246\.1([678]\d|19[01])|216\.137\.(3[2-9]|[45]\d|6[0-3]))\.
#Filter the 205.251.xxx and 207.171.xxx /2[34] IP subranges
RewriteCond %{REMOTE_ADDR} !^(205\.251\.2(0[24567]|1[01489]|20|22|49|50|52)\|207\.172\.17[09])\.
然而我真正关心的是,如果您引用的公告上的声明“ CloudFront IP地址经常发生变化,我们无法保证提前通知变更......客户不应将这些地址用于关键任务应用程序,绝不能硬编码它们在DNS名称中。“
没有更好的方法来拦截这些CloudFront IP - 例如来自请求标题?