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

如何阻止直接访问服务器音频文件但允许网页播放器加载?

解决办法:允许主页加载音频,禁止直接访问音频URL

方法一:用.htaccess校验请求来源(简单高效)

在/files/audio/文件夹里新建.htaccess文件,或者直接在网站根目录的.htaccess中添加以下规则,仅放行来自你自身域名的请求:

SetEnvIfNoCase Referer "^https?://www\.website\.com/" allowed_referer
Order Deny,Allow
Deny from all
Allow from env=allowed_referer
# 可选:允许本地测试环境的请求
Allow from 127.0.0.1

规则说明:

  • 用户从你主页加载音频时,浏览器会自动携带Referer头,值为你主页的URL,这条规则会允许这类合法请求通过。
  • 直接输入音频URL访问时,Referer头为空或非你的域名,请求会被拒绝(返回403禁止访问)。
  • 若你的网站存在多子域名或HTTP/HTTPS混合的情况,可将Referer匹配规则调整为"^https?://(www\.)?website\.com/"。

方法二:PHP代理转发(更稳妥,不受Referer限制)

若担心部分浏览器隐私模式屏蔽Referer导致正常请求被拦截,可使用PHP脚本作为中间层:

  1. 在网站根目录创建audio-proxy.php,代码如下:
<?php
// 仅允许来自你主页的请求
$allowed_domain = 'https://www.website.com/';
$referer = $_SERVER['HTTP_REFERER'] ?? '';

if (strpos($referer, $allowed_domain) !== 0) {
    header('HTTP/1.1 403 Forbidden');
    exit('禁止访问');
}

// 音频文件的实际服务器路径
$audio_file = $_SERVER['DOCUMENT_ROOT'] . '/files/audio/x.mp3';

if (!file_exists($audio_file)) {
    header('HTTP/1.1 404 Not Found');
    exit('文件不存在');
}

// 设置响应头,让浏览器识别音频格式
header('Content-Type: audio/mpeg');
header('Content-Length: ' . filesize($audio_file));
// 输出音频内容
readfile($audio_file);
exit;
  1. 修改主页的audio标签:
<audio>
    <source src="/audio-proxy.php" type="audio/mpeg">
</audio>
  1. 给/files/audio/目录添加.htaccess彻底禁止直接访问:
Deny from all

方法优势:

  • 完全隐藏音频的真实URL,所有请求需经PHP脚本校验,即便用户猜测到代理地址,无合法来源也无法获取文件。
  • 可按需扩展校验逻辑,比如增加用户登录状态验证等。

之前失效的原因

你之前用重定向失效,是因为重定向会拦截所有请求(包括主页audio的合法请求),而上述Referer规则是精准放行来自自身域名的请求,不会误杀正常加载。

若方法一未生效,可打开浏览器开发者工具的Network面板,检查音频请求的Referer头是否正常发送——部分隐私模式会屏蔽该头,此时建议切换至方法二。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.09 05:32:49