菜鸟科技网

网站如何设置禁止外链?

在网站运营中,禁止外链(即禁止其他网站链接到本站的特定资源或整体禁止外链)是常见的需求,通常出于保护版权、防止资源盗用、控制流量流向或避免恶意链接影响网站SEO等目的,要实现禁止外链,需从技术配置、服务器设置、内容管理等多个维度入手,以下是具体操作方法和注意事项。

网站如何设置禁止外链?-图1
(图片来源网络,侵删)

通过服务器配置禁止外链

服务器层面的禁止外链是最直接有效的方式,可通过修改配置文件实现,适用于Apache和Nginx两种主流服务器。

Apache服务器配置

Apache的.htaccess文件(需确保服务器已启用mod_rewrite模块)是实现禁止外链的核心工具,以禁止图片外链为例,可在网站根目录的.htaccess文件中添加以下代码:

RewriteEngine on
RewriteCond %{HTTP_REFERER} !^$ [NC]
RewriteCond %{HTTP_REFERER} !yourdomain\.com [NC]
RewriteCond %{HTTP_REFERER} !www\.yourdomain\.com [NC]
RewriteRule \.(jpg|jpeg|png|gif|bmp|webp)$ - [F,NC]

代码解析:

  • RewriteCond %{HTTP_REFERER} !^$ [NC]:允许空HTTP_REFERER(直接访问或通过浏览器工具打开);
  • RewriteCond %{HTTP_REFERER} !yourdomain\.com [NC]:允许本站域名访问(NC表示不区分大小写);
  • RewriteRule \.(jpg|jpeg|png|gif|bmp|webp)$ - [F,NC]:对指定图片格式返回403禁止访问。

若需禁止所有文件类型的外链,可修改为:

网站如何设置禁止外链?-图2
(图片来源网络,侵删)
RewriteRule .*\.(.*)$ - [F,NC]

Nginx服务器配置

Nginx的配置文件通常为nginx.conf或站点配置文件(如yourdomain.conf),通过location模块和valid_referers指令实现,以禁止图片外链为例:

location ~ \.(jpg|jpeg|png|gif|bmp|webp)$ {
    valid_referers none blocked server_names
    *.yourdomain.com;
    if ($invalid_referer) {
        return 403;
    }
}

代码解析:

  • valid_referers:定义允许的来源,none表示允许空referer,blocked表示被防火墙隐藏referer的请求,server_names表示本站域名;
  • if ($invalid_referer):若来源不在允许列表中,返回403状态码。

若需自定义禁止后的返回内容(如替换为指定图片),可修改为:

location ~ \.(jpg|jpeg|png|gif|bmp|webp)$ {
    valid_referers none blocked server_names
    *.yourdomain.com;
    if ($invalid_referer) {
        rewrite ^/ http://yourdomain.com/no-hotlinking.png break;
    }
}

通过网站程序或CMS禁止外链

若网站使用WordPress、Discuz!等CMS程序,可通过插件或主题功能实现禁止外链,无需手动修改服务器配置。

网站如何设置禁止外链?-图3
(图片来源网络,侵删)

WordPress解决方案

  • 插件推荐:安装“Hotlink Protection”或“Disable Hotlink Images”等插件,启用后可在后台设置允许的域名和禁止的文件类型,插件会自动生成.htaccess规则或通过PHP代码实现。
  • 代码实现:在主题的functions.php文件中添加以下代码(需配合.htaccess使用):
    function disable_hotlinking() {
        $referrer = $_SERVER['HTTP_REFERER'];
        $blocked_domains = array('example.com', 'bad-site.com');
        foreach ($blocked_domains as $domain) {
            if (strpos($referrer, $domain) !== false) {
                header('HTTP/1.0 403 Forbidden');
                exit();
            }
        }
    }
    add_action('send_headers', 'disable_hotlinking');

Discuz!解决方案

  • 后台设置:进入“全局”→“防刷新防灌水”→“防盗链设置”,勾选“开启图片盗链保护”,设置允许的域名和防盗链扩展名(如jpg|gif|png),并指定替换图片路径。
  • 手动修改:若未开启防盗链插件,可修改config/config_global.php文件,添加:
    $_config['security']['antispam']['hotlink']['enable'] = 1;
    $_config['security']['antispam']['hotlink']['domains'] = 'yourdomain.com';

通过JavaScript禁止外链

对于需要前端控制的场景(如禁止文本或特定元素被外链),可通过JavaScript实现,但此方法可靠性较低(用户禁用JS后失效)。

<script>
document.addEventListener('DOMContentLoaded', function() {
    const links = document.querySelectorAll('a');
    links.forEach(link => {
        link.addEventListener('click', function(e) {
            if (window.opener || window.parent !== window) {
                e.preventDefault();
                alert('禁止外链!');
            }
        });
    });
});
</script>

通过HTTP响应头禁止外链

通过设置Content-Security-Policy (CSP)X-Frame-Options等响应头,可限制资源被其他网站加载,尤其适用于防止被嵌入iframe。

设置CSP响应头

在服务器配置中添加以下头信息(以Nginx为例):

add_header Content-Security-Policy "default-src 'self'; img-src 'self' data:; script-src 'self' 'unsafe-inline'";
  • default-src 'self':默认只允许本站资源;
  • img-src 'self' data::允许本站图片和base64图片。

设置X-Frame-Options

add_header X-Frame-Options "SAMEORIGIN";
  • SAMEORIGIN:只允许本站页面将本站内容嵌入iframe。

禁止外链的注意事项与扩展设置

  1. 允许特定域名:在服务器或CMS配置中,可通过添加RewriteCond %{HTTP_REFERER} !allowed-domain\.com [NC](Apache)或valid_referers allowed-domain.com;(Nginx)实现白名单机制。
  2. 替换为警告图片:在禁止外链时,可返回自定义图片(如版权声明)而非403错误,提升用户体验。
  3. 日志监控:定期检查服务器错误日志(如Apache的error_log),分析外链来源,动态调整禁止策略。
  4. 动态资源处理:对于PHP、ASP等动态资源,可通过检查HTTP_REFERER并返回403(PHP示例:if(strpos($_SERVER['HTTP_REFERER'], 'yourdomain.com') === false) die('Access Denied');)。

禁止外链效果对比表

方法 优点 缺点 适用场景
Apache/Nginx配置 高效、彻底,支持文件类型过滤 需服务器权限,修改后需重启 自建服务器、VPS
CMS插件/主题功能 无需代码,可视化操作 依赖CMS版本,可能影响性能 WordPress、Discuz!等CMS用户
JavaScript控制 灵活,可针对特定元素 依赖JS,易被绕过 简单前端防复制
HTTP响应头 支持CSP等高级策略 部分旧浏览器不支持 防止iframe嵌入、资源盗链

相关问答FAQs

Q1: 禁止外链后,对网站SEO是否有影响?
A: 合理禁止外链不会直接影响SEO,但需注意:① 若禁止了搜索引擎的爬虫referer(如百度、Google),可能导致网站内容无法被收录,因此在配置中需添加搜索引擎的域名至白名单;② 过度禁止外链可能减少外部自然流量,建议仅禁止恶意或非授权外链,保留正常合作网站的链接权限。

Q2: 如何测试禁止外链是否生效?
A: 可通过以下方法测试:① 在本地创建一个HTML文件,插入目标网站的图片或链接,用浏览器打开该文件(模拟外链场景),若图片无法显示或链接被拦截,则说明生效;② 使用在线工具(如“HTTP Referer Test”)输入目标资源URL,修改referer为非授权域名,查看返回状态码是否为403;③ 检查服务器访问日志,确认外链请求是否被拒绝。

分享:
扫描分享到社交APP
上一篇
下一篇