如何通过.htaccess阻止含compute.amazonaws.com的请求(Apache 2.4)
解决Apache 2.4阻止AWS垃圾机器人请求的方案
你之前的规则无效是因为Apache 2.4已废弃Order/Deny/Allow这类旧指令,改用Require指令体系实现访问控制。针对你的需求,提供两种可行方案:
方案一:通过环境变量匹配拦截
利用SetEnvIf匹配主机名并标记,再通过Require拒绝标记的请求:
# 匹配以compute.amazonaws.com结尾的远程主机名,设置环境变量block_aws SetEnvIf Remote_Host "compute\.amazonaws\.com$" block_aws # 默认允许所有请求 Require all granted # 拒绝带有block_aws环境变量的请求 Require not env block_aws
注:正则里的
.需要转义(\.),否则会匹配任意字符;$确保匹配域名结尾,避免误拦截包含该字符串的其他主机。
方案二:直接通过Require not host拦截
更简洁的写法,直接匹配所有compute.amazonaws.com的子域名:
# 默认允许所有请求 Require all granted # 拒绝所有*.compute.amazonaws.com的主机请求 Require not host *.compute.amazonaws.com
重要注意事项
- 确保Apache启用了
mod_setenvif和mod_authz_core模块,可通过命令apache2ctl -M(Linux)或httpd -M(Windows)查看模块列表,确认这两个模块存在。 - 若使用
.htaccess文件,需在Apache主配置的对应目录块中设置AllowOverride All(或至少AllowOverride AuthConfig FileInfo),否则.htaccess规则不会生效。 - 测试时可通过
curl模拟请求验证,例如:
若返回403 Forbidden则说明规则生效。curl --resolve ec2-47-128-60-90.ap-southeast-1.compute.amazonaws.com:80:你的服务器IP http://ec2-47-128-60-90.ap-southeast-1.compute.amazonaws.com
内容的提问来源于stack exchange,提问作者Sylvia889p
相关产品推荐
相关产品推荐

