仅允许特定域名访问网站的.htaccess规则问题排查
问题原因
你的.htaccess规则存在3个关键问题,导致domain-2.com的访问被误拦截:
- Referer匹配过于严苛:原规则仅精确匹配
https://domain-2.com/$(带末尾斜杠的根路径),但实际点击链接时,Referer可能是不带斜杠的https://domain-2.com,或是domain-2.com下的其他子页面(如https://domain-2.com/article.html),这些情况都会被判定为不符合条件。 - RewriteRule格式错误:RewriteRule的第一个参数应匹配当前域名的请求路径,而非完整的外部URL,原规则中的
https://domain-1.com/会导致规则无法正确识别请求。 - 协议可能不匹配:你的链接使用
http://domain-1.com,但规则中检查的是https://domain-2.com,若domain-2.com实际使用HTTP协议,Referer会以http://开头,同样无法匹配规则。
修正后的.htaccess规则
替换原规则为以下代码:
RewriteEngine on RewriteCond %{HTTP_REFERER} !^https?://domain-2\.com(/.*)?$ [NC] RewriteRule ^ - [F,NC]
规则说明
!^https?://domain-2\.com(/.*)?$:匹配所有来自domain-2.com的请求,https?允许HTTP或HTTPS协议,(/.*)?兼容根路径或任意子页面,[NC]忽略大小写避免匹配失败。^:匹配domain-1.com上的所有请求路径。[F,NC]:对不符合条件的请求返回403 Forbidden状态码,[NC]忽略大小写。
额外注意事项
- 确保domain-2.com的链接使用与站点实际一致的协议(HTTP/HTTPS),避免Referer协议不匹配导致拦截。
- 部分浏览器或隐私插件会屏蔽Referer,这种情况下即使点击链接也会被拦截,属于浏览器端行为,无法通过服务器规则解决。
内容的提问来源于stack exchange,提问作者Pro525
相关产品推荐
相关产品推荐

