用.htaccess保护WordPress图片防外链/直访及排查HTTP_REFERER问题
WordPress图片防盗链及Referer查看方法
需求说明
希望自身WordPress站点页面(示例:https://fixogram.ru/posmotreli-film-prostaya-prosba-15-noyabrya-2025/)能正常显示图片,但禁止以下两种情况:
- 其他网站引用本站图片
- 直接访问图片URL(示例:
https://fixogram.ru/wp-content/uploads/2025/11/img_20251115_213955-1024x768.jpg)
尝试过的规则及问题
第一段规则
<IfModule mod_rewrite.c> RewriteEngine On RewriteCond %{HTTP_REFERER} ^https?://(www\.)?fixogram\.ru \[NC,OR\] RewriteCond %{HTTP_REFERER} ^https?://fixogram\.ru \[NC,OR\] RewriteRule \.(jpg|jpeg|png|gif|webp)$ - \[F,NC\] </IfModule>
问题:逻辑完全错误,当Referer来自本站时直接返回403,导致站内、站外都无法查看图片。
第二段规则
<IfModule mod_rewrite.c> RewriteEngine On RewriteCond %{HTTP_REFERER} !^$ RewriteCond %{HTTP_REFERER} ^https?://(www\.)?fixogram\.ru \[NC,OR\] RewriteCond %{HTTP_REFERER} ^https://fixogram\.ru \[NC,OR\] RewriteRule \.(jpg|jpeg|png|gif|webp)$ - \[F,NC\] </IfModule>
问题:逻辑错误,拒绝了来自本站的非空Referer请求,导致文章页面无法加载图片;同时允许空Referer请求,等于放开了直接访问图片的权限。
一、Chrome浏览器查看HTTP Referer步骤
要确认文章页面加载图片时的Referer信息,按以下操作:
- 打开Chrome,访问目标文章页面。
- 按下
F12打开开发者工具,切换到Network标签。 - 刷新页面,在资源列表中找到目标图片(可通过搜索文件名快速定位)。
- 点击该图片资源,在右侧Headers面板的Request Headers区域,找到
Referer字段,即可查看图片加载时携带的Referer值。
二、正确的Apache Rewrite防盗链规则
以下规则可实现需求:仅允许本站页面加载图片,禁止外链引用和直接访问:
<IfModule mod_rewrite.c> RewriteEngine On # 匹配所有非本站来源的Referer(包括空Referer) RewriteCond %{HTTP_REFERER} !^https?://(www\.)?fixogram\.ru/ [NC] # 对指定格式的图片返回403禁止访问 RewriteRule \.(jpg|jpeg|png|gif|webp)$ - [F,NC] </IfModule>
规则说明
!^https?://(www\.)?fixogram\.ru/ [NC]:正则匹配所有Referer不是来自本站的请求(空Referer也会被匹配)[F,NC]:F表示返回403 Forbidden,NC表示忽略大小写匹配
内容的提问来源于stack exchange,提问作者Fixin
相关产品推荐
相关产品推荐

