如何调整.htaccess规则实现仅禁止URL直接访问MP3文件但允许下载按钮下载?
解决直接URL访问MP3限制但保留下载按钮功能的问题
你的原规则RewriteRule \.(|mp3|)$ - [F,L]太“一刀切”了——它直接拦截了所有MP3文件的请求,不管是用户直接输入URL,还是点击你网站内的下载按钮发起的请求。要实现「只禁止直接URL访问,允许合法下载按钮请求」,核心思路是验证请求的来源是否属于你的网站,我们可以通过HTTP Referer头来判断,或者结合请求方法优化兼容性。
方案1:基于Referer的来源验证(基础版)
这个方案会拦截「直接在地址栏输入URL(无Referer)」和「来自其他网站的外链请求」,仅允许来自你本站的请求访问MP3:
# 拦截直接URL访问或非本站来源的MP3请求 RewriteCond %{HTTP_REFERER} ^$ [OR] RewriteCond %{HTTP_REFERER} !^https?://(www\.)?yourdomain\.com/ [NC] RewriteRule \.mp3$ - [F,L]
规则解释:
RewriteCond %{HTTP_REFERER} ^$ [OR]:匹配无Referer的请求(也就是用户直接输入MP3 URL的场景),[OR]表示满足任意一个条件就执行拦截RewriteCond %{HTTP_REFERER} !^https?://(www\.)?yourdomain\.com/ [NC]:匹配Referer不是你的网站的请求(比如其他网站盗链你的MP3),!表示否定,NC忽略大小写,https?兼容HTTP/HTTPS,(www\.)?兼容带/不带www的域名RewriteRule \.mp3$ - [F,L]:满足以上任一条件时,返回403 Forbidden(F标记),并停止后续规则处理(L标记)
⚠️ 注意:把规则中的yourdomain.com替换成你实际的网站域名(比如example.com)。
方案2:结合请求方法优化兼容性(进阶版)
部分浏览器或隐私插件会隐藏Referer,导致合法的下载请求也被拦截。如果你的下载按钮是通过POST请求触发的(很多网站会用POST处理下载来防爬),可以添加请求方法判断,允许POST请求绕过拦截:
# 仅拦截GET类型的非法请求,允许POST请求正常下载 RewriteCond %{REQUEST_METHOD} GET RewriteCond %{HTTP_REFERER} ^$ [OR] RewriteCond %{HTTP_REFERER} !^https?://(www\.)?yourdomain\.com/ [NC] RewriteRule \.mp3$ - [F,L]
规则解释:
新增的RewriteCond %{REQUEST_METHOD} GET表示:只有当请求是GET类型时,才应用后续的拦截规则。POST请求(比如你的下载按钮提交的请求)会直接通过,避免因Referer缺失导致的下载失败。
测试建议
修改规则后,记得清空浏览器缓存,然后测试两种场景:
- 直接在地址栏输入MP3的完整URL,应该返回
403 Forbidden - 点击网站内的下载按钮,应该能正常触发下载
内容的提问来源于stack exchange,提问作者Chris Sigo Obidimma
相关产品推荐
相关产品推荐

