You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

在.htaccess中无法同时使用REQUEST_URI与HTTP_REFERER的问题求助

问题解决:Apache RewriteCond 组合不生效的原因及修正

你的Rewrite规则问题出在HTTP_REFERER条件的否定写法错误,导致两个条件的逻辑组合不符合预期。

错误原因

第二个RewriteCond里的^!https://example.org/*写法完全错误:

  • 否定符号!应该放在整个正则表达式的最前面,表示“不匹配该规则”,而不是写在正则内部
  • 正则里的^!会被解析为“匹配以!开头的Referer值”,这显然不是你要的逻辑

修正后的配置

RewriteEngine On
# 匹配访问路径以/rosters开头
RewriteCond %{REQUEST_URI} ^/rosters
# 匹配Referer不是以https://example.org/开头的请求(NC忽略大小写)
RewriteCond %{HTTP_REFERER} !^https://example.org/ [NC]
# 执行301重定向到指定页面
RewriteRule ^(.*)$ https://mypagesite.com/contact/ [R=301,L]

额外说明

  1. 处理空Referer的情况:如果用户直接在地址栏输入/rosters(此时HTTP_REFERER为空),当前配置会触发重定向,因为空值不匹配^https://example.org/。如果不想对空Referer的请求重定向,需要添加额外条件:

    RewriteEngine On
    RewriteCond %{REQUEST_URI} ^/rosters
    RewriteCond %{HTTP_REFERER} .+  # 确保Referer不为空
    RewriteCond %{HTTP_REFERER} !^https://example.org/ [NC]
    RewriteRule ^(.*)$ https://mypagesite.com/contact/ [R=301,L]
    
  2. 测试建议:

    • 用浏览器开发者工具的Network面板,查看请求的Referer头是否正确
    • 用curl命令快速验证:
      # 来自example.org的请求,不应重定向
      curl -I -H "Referer: https://example.org/test" https://your-domain.com/rosters
      # 来自其他域名的请求,应重定向
      curl -I -H "Referer: https://other-site.com" https://your-domain.com/rosters
      # 无Referer的请求,按默认配置会重定向
      curl -I https://your-domain.com/rosters
      

内容的提问来源于stack exchange,提问作者James

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.19 00:27:11