用 .htaccess实现图片防盗链(禁外链+指定网址放行)完整教程

2026-04-21 12:54

本方法通过 Apache 的 .htaccess 规则实现图片资源防盗链,禁止外部网站非法引用图片,同时可自定义放行信任域名,支持返回 403 禁止或自定义默认提示图片。

一、适用环境与实现原理

适用于 Apache 服务器环境,通过判断 HTTP_REFERER(来源地址)识别请求是否为合法访问,仅允许本站及白名单域名加载图片,非法外链请求直接拦截。

二、完整 .htaccess 规则代码

将以下代码放置在网站根目录的 .htaccess 文件中,若无该文件可直接新建。

RewriteEngine On 针对图片、静态资源生效 RewriteCond %{REQUEST_FILENAME} .(jpg|jpeg|png|gif|bmp|webp|ico|svg)$ [NC] 放行空来源、本地访问 RewriteCond %{HTTP_REFERER} !^$ RewriteCond %{HTTP_REFERER} !localhost [NC] RewriteCond %{HTTP_REFERER} !127.0.0.1 [NC] 白名单放行域名(可自行添加、修改) RewriteCond %{HTTP_REFERER} !^https?://(.+.)?zhihhu.com [NC] RewriteCond %{HTTP_REFERER} !^https?://(.+.)?798game.com [NC] RewriteCond %{HTTP_REFERER} !^https?://(.+.)?baidu.com [NC] RewriteCond %{HTTP_REFERER} !^https?://(.+.)?qq.com [NC] RewriteCond %{HTTP_REFERER} !^https?://(.+.)?weixin.qq.com [NC] 拦截非法外链,返回 403 禁止 RewriteRule ^(.*)$ - [F,L] 可选:替换为显示默认提示图片 RewriteRule ^(.*)$ /images/no-hotlink.png [L]

三、规则配置说明

1. 开启重写引擎

首先必须启用 RewriteEngine,否则所有重写规则均不生效。

RewriteEngine On

2. 匹配图片资源类型

指定需要防盗链的文件后缀,可根据需求增删格式,NC 表示不区分大小写。

RewriteCond %{REQUEST_FILENAME} .(jpg|jpeg|png|gif|bmp|webp|ico|svg)$ [NC]

3. 放行本地与空来源访问

避免本地访问、浏览器不携带来源信息时出现图片无法加载的问题。

RewriteCond %{HTTP_REFERER} !^$ RewriteCond %{HTTP_REFERER} !localhost [NC] RewriteCond %{HTTP_REFERER} !127.0.0.1 [NC]

4. 设置信任域名白名单

添加允许外链的域名,支持主域名及所有子域名,复制行即可新增多个放行地址。

RewriteCond %{HTTP_REFERER} !^https?://(.+.)?允许的域名.com [NC]

5. 外链拦截处理方式

提供两种处理方式,二选一使用:

方式一:直接返回 403 禁止访问(推荐,节省服务器资源)

RewriteRule ^(.*)$ - [F,L]

方式二:显示自定义提示图片,需提前上传图片至服务器对应路径

RewriteRule ^(.*)$ /images/no-hotlink.png [L]

四、使用与注意事项

1. 代码需放置在网站根目录 .htaccess 文件中;

2. 修改白名单域名时,注意域名前的转义符 . 不可省略;

3. 若部分正常访问出现异常,可检查是否放行对应域名;

4. 仅适用于 Apache 服务器,Nginx 环境需使用对应配置规则。
 实用可复制的代码:

RewriteEngine On RewriteCond %{REQUEST_FILENAME} \.(jpg|jpeg|png|gif|bmp|webp|ico|svg|js)$ [NC] RewriteCond %{HTTP_REFERER} !^$ RewriteCond %{HTTP_REFERER} !localhost [NC] RewriteCond %{HTTP_REFERER} !127.0.0.1 [NC] RewriteCond %{HTTP_REFERER} !^https?://(.+\.)?zhihhu\.com [NC] RewriteCond %{HTTP_REFERER} !^https?://(.+\.)?798game\.com [NC] RewriteCond %{HTTP_REFERER} !^https?://(.+\.)?baidu\.com [NC] RewriteCond %{HTTP_REFERER} !^https?://(.+\.)?qq\.com [NC] RewriteCond %{HTTP_REFERER} !^https?://(.+\.)?weixin\.qq\.com [NC] RewriteRule ^(.*)$ - [F,L]

【收藏本页】Ctrl+D或转到

意见反馈

© 2017-2026 上海好生活 https://www.zhaozhishi.net/
上海生活网站是上海分类信息平台之一,便民信息和免费信息发布