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

如何用htaccess实现非指定域名来源时阻止特定查询字符串?

解决.htaccess限制非允许域名访问特定操作的问题

让我来帮你调整这个配置,先分析下你现有规则的问题,再给出修正方案:

你的原配置存在的问题

  1. 未处理空Referer场景:当用户直接输入URL访问(或某些工具发起请求)时,HTTP_REFERER会为空,这时候你的!domain1\.com这类条件会匹配空字符串,导致误拦截这类合法请求。
  2. 域名匹配不精确:你的正则没有锚定域名的开头,可能会出现意外匹配——比如如果某个恶意Referer里包含domain1.com的片段(比如http://hacker.com/xxxdomain1.com),会被误判为合法来源。

修正后的配置

RewriteEngine On

# 定义允许的来源:空Referer(可选)或指定域名(支持http/https、带/不带www,不区分大小写)
RewriteCond %{HTTP_REFERER} ^$ [OR]
RewriteCond %{HTTP_REFERER} ^https?://(www\.)?domain1\.com/ [NC,OR]
RewriteCond %{HTTP_REFERER} ^https?://(www\.)?domain2\.com/ [NC,OR]
RewriteCond %{HTTP_REFERER} ^https?://(www\.)?domain3\.com/ [NC]
# 符合上述条件则跳过后续规则,允许访问
RewriteRule ^ - [L]

# 非允许来源时,检查是否是特定操作(action=view)
RewriteCond %{QUERY_STRING} ^action=view$ [NC]
# 返回403禁止访问
RewriteRule .* - [F,L]

配置说明

  • 允许的来源规则:
    • ^$匹配空Referer,如果你不想允许直接输入URL访问action=view,可以去掉这一行和后面的[OR]。
    • ^https?://匹配http或https协议;(www\.)?可选匹配www前缀;[NC]表示不区分域名大小写(比如Domain1.com也会被认可);结尾的/确保匹配的是域名根路径开始的请求。
    • [L]标记表示如果匹配成功,就停止执行后续的Rewrite规则,直接允许访问。
  • 禁止规则:
    • ^action=view$精确匹配Query String,避免误匹配类似action=view&other=xxx的请求;[NC]同样支持大小写不敏感。
    • [F]返回403 Forbidden状态码,[L]停止后续规则。

注意事项

  • HTTP_REFERER是可以被伪造的,这个方案只能作为基础的访问限制,不能完全阻止恶意请求。
  • 确保你的服务器已经开启了mod_rewrite模块,否则规则不会生效。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 07:16:36