Apache:如何在.htaccess中为REMOTE_HOST设置访问例外?
.htaccess 配置:排除特定主机/IP的拦截规则
在现有拦截规则前添加反向匹配条件,先放行目标主机/IP,再执行恶意访客拦截,具体配置如下:
方案1:仅排除指定主机
如果yyy是固定值,使用精确匹配:
# 放行目标主机 RewriteCond %{REMOTE_HOST} !^sta\.106\.51\.64\.yyy\.client\.server\.de$ [NC] # 拦截恶意主机列表 RewriteCond %{REMOTE_HOST} (sta\.81\.106\.9\.x\.client\.server\.de) [NC,OR] RewriteCond %{REMOTE_HOST} (sta\.83\.94\.46\.xx\.client\.server\.de) [NC,OR] RewriteCond %{REMOTE_HOST} (sta\.106\.51\.63\.xxx\.client\.server\.de) [NC,OR] # ... 更多恶意主机规则 ... RewriteRule .* - [F,L]
如果yyy是可变的(比如任意子段),调整正则匹配所有sta.106.51.64.*.client.server.de格式的主机:
RewriteCond %{REMOTE_HOST} !^sta\.106\.51\.64\.[^.]+\.client\.server\.de$ [NC]
方案2:同时排除主机和对应IP(更稳妥)
考虑到REMOTE_HOST依赖DNS解析可能存在异常,可同时放行对应的IP:
# 放行目标主机 RewriteCond %{REMOTE_HOST} !^sta\.106\.51\.64\.yyy\.client\.server\.de$ [NC] # 放行对应IP RewriteCond %{REMOTE_ADDR} !^88\.198\.yy\.zzz$ # 拦截恶意主机列表 RewriteCond %{REMOTE_HOST} (sta\.81\.106\.9\.x\.client\.server\.de) [NC,OR] RewriteCond %{REMOTE_HOST} (sta\.83\.94\.46\.xx\.client\.server\.de) [NC,OR] RewriteCond %{REMOTE_HOST} (sta\.106\.51\.63\.xxx\.client\.server\.de) [NC,OR] # ... 更多恶意主机规则 ... RewriteRule .* - [F,L]
关键说明
!表示反向匹配:只有当请求的主机/IP不满足该条件时,才会进入后续拦截规则^和$确保完全匹配,避免因部分匹配导致误放行或误拦截- 排除条件必须放在所有拦截规则的最前面,保证允许的请求直接跳过拦截逻辑
内容的提问来源于stack exchange,提问作者josefus
相关产品推荐
相关产品推荐

