.htaccess中RewriteCond无法放行指定IP的问题咨询
.htaccess IP限制配置问题分析与修复
你的配置存在两处潜在问题,导致指定IP访问仍被重定向:
1. 反向代理环境下IP识别错误
如果你的站点通过反向代理(如Nginx、Cloudflare)部署,%{REMOTE_ADDR}获取的是代理服务器的IP,而非你的真实客户端IP。此时即使你使用123.123.123.123访问,规则会判定你不在允许列表内,触发重定向。
2. 图片后缀匹配语法错误
原规则中jpe?g?多了一个问号,正确写法应为jpe?g(匹配jpg和jpeg格式),否则可能无法正确排除图片资源(虽不是你被重定向的直接原因,但会导致图片也被拦截)。
修正后的配置
情况一:站点使用反向代理
添加X-Forwarded-For头的判断,兼容代理环境获取真实IP:
SetEnvIf X-Forwarded-Proto https HTTPS=on # 同时校验真实客户端IP(X-Forwarded-For)和直接访问IP(REMOTE_ADDR) RewriteCond %{HTTP:X-Forwarded-For} !^123\.123\.123\.123 RewriteCond %{REMOTE_ADDR} !^123\.123\.123\.123 RewriteCond %{REQUEST_URI} !/dev_site_notice.html$ [NC] RewriteCond %{REQUEST_URI} !\.(jpe?g|png|gif)$ [NC] RewriteRule .* /dev_site_notice.html [R=302,L]
情况二:站点直接对外访问(无反向代理)
仅修正图片后缀的语法错误即可:
SetEnvIf X-Forwarded-Proto https HTTPS=on RewriteCond %{REMOTE_ADDR} !^123\.123\.123\.123 RewriteCond %{REQUEST_URI} !/dev_site_notice.html$ [NC] RewriteCond %{REQUEST_URI} !\.(jpe?g|png|gif)$ [NC] RewriteRule .* /dev_site_notice.html [R=302,L]
验证步骤
- 若使用PHP环境,可在页面中输出
<?php echo $_SERVER['REMOTE_ADDR'] . '<br>' . $_SERVER['HTTP_X_FORWARDED_FOR']; ?>,确认服务器获取到的IP是否为你的真实客户端IP。 - 测试前清空浏览器缓存,避免旧重定向规则的缓存干扰结果。
内容的提问来源于stack exchange,提问作者Joshua JJ S
相关产品推荐
相关产品推荐

