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

利用.htaccess Rewrite规则实现盗链图转水印版并移除查询参数

实现防盗链并自动切换水印/无水印图片的.htaccess方案

刚好做过类似的需求,咱们可以通过Apache的mod_rewrite模块,结合HTTP Referer头判断来实现这个功能——自有网站访问显示无水印图,盗链请求自动跳转到带水印的版本,同时自动移除URL里的查询参数。

下面是具体的.htaccess规则和详细说明:

# 开启URL重写功能
RewriteEngine On

# 条件1:确保请求的是一个真实存在的无水印图片文件
RewriteCond %{REQUEST_FILENAME} -f
# 条件2:排除没有Referer的请求(比如用户直接在浏览器输入URL、保存图片的情况)
RewriteCond %{HTTP_REFERER} !^$
# 条件3:如果Referer不是来自当前域名(支持HTTP/HTTPS,不区分大小写)
RewriteCond %{HTTP_REFERER} !^https?://%{HTTP_HOST}/ [NC]

# 核心重写规则:将原图片路径重定向到wm子目录下的同名图片,自动移除查询参数
RewriteRule ^wp-content/uploads/([^/]+)$ wp-content/uploads/wm/$1 [L,R=302]

规则细节解释:

  1. RewriteEngine On:必须开启这个才能让重写规则生效,确保你的Apache服务器已经启用了mod_rewrite模块(大部分虚拟主机默认都开了)。
  2. 三个RewriteCond条件:
    • 第一个条件保证只对存在的图片文件生效,避免对无效路径做多余处理;
    • 第二个条件放过没有Referer的请求——这类请求通常是用户直接访问,咱们要显示无水印图;
    • 第三个条件是核心判断:如果请求的来源Referer不是咱们自己的域名,就认定是盗链,触发重写。
  3. RewriteRule规则:
    • ^wp-content/uploads/([^/]+)$:匹配原图片的路径,提取文件名部分(比如image-name.jpg);
    • wp-content/uploads/wm/$1:把提取到的文件名拼到wm子目录下,生成带水印图片的路径;
    • [L,R=302]:L表示这是最后一条规则,匹配后就停止后续处理;R=302是临时重定向,浏览器地址栏会显示跳转后的URL。如果想隐藏跳转(用户看到的还是原URL,但实际返回水印图),可以去掉R=302,只保留[L]。

注意事项:

  • 如果你的图片存储路径不是wp-content/uploads,记得修改规则里的路径部分;
  • %{HTTP_HOST}会自动获取当前域名,不用硬编码,适合多域名或者域名变更的场景;
  • 有些浏览器或工具可能不会发送Referer头,这时候会默认显示无水印图,这是合理的,避免误拦截正常访问;
  • 测试盗链的话,可以用其他网站的iframe引用你的图片,或者用curl命令模拟:
    curl -H "Referer: https://other-domain.com" https://www.example.com/wp-content/uploads/image-name.jpg?t=123456
    
    正常情况下会返回wm目录下的水印图片,且URL里的查询参数被移除。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.19 08:54:11