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

使用RewriteMap与RewriteRules重定向盗链PDF文件失败求助

修复PDF盗链重定向问题

核心问题分析

你的配置存在几个关键问题,导致重定向未生效:

  • 映射键匹配不兼容:pdf-mapping.txt里的键是带前置斜杠的完整路径(比如/stakeholder-register.pdf),但.htaccess中RewriteRule匹配的$1是相对路径(无前置斜杠),导致映射查找失败。
  • REFERER规则限制过严:当用户直接在地址栏输入PDF URL时,HTTP_REFERER为空,会被第一条RewriteCond排除,无法触发重定向。
  • 编码路径不匹配:pdf-mapping.txt里的Exception%20Report.pdf是URL编码后的路径,但Apache实际接收的是解码后的Exception Report.pdf,导致映射失效。

分步修复方案

1. 调整映射文件格式

修改/home/stakehol/public_html/pdf-mapping.txt,去掉键的前置斜杠,同时使用解码后的真实文件名(用空格代替%20):

stakeholder-register.pdf /stakeholder-register.html
project-templates/lessons-learned-template.pdf /project-templates/lessons-learned-template.html
project-templates/Exception Report.pdf /project-templates/prince-2-exception-report.html

2. 更新 .htaccess 规则

替换现有规则,确保映射匹配逻辑正确,同时按需调整盗链拦截范围:

RewriteEngine On

# 拦截非本站来源的PDF请求(如需禁止直接访问,删除下方第一条规则)
RewriteCond %{HTTP_REFERER} !^$
RewriteCond %{HTTP_REFERER} !^http(s)?://(www\.)?stakeholdermap.com [NC]
# 检查当前请求的PDF路径在映射表中存在
RewriteCond ${pdf-mapping:%REQUEST_URI} !^$
# 重定向到对应HTML页面
RewriteRule ^.*\.pdf$ https://www.stakeholdermap.com/${pdf-mapping:%REQUEST_URI} [R=302,L]
  • 使用%REQUEST_URI代替$1,它是包含前置斜杠的完整请求路径,能精准匹配映射表中的键。
  • 若要拦截所有非本站发起的请求(包括直接访问),删除RewriteCond %{HTTP_REFERER} !^$这条规则;若需允许用户直接输入URL访问PDF,则保留该规则。

3. 确保文件权限合法

让Apache进程能够读取映射文件:

chmod 644 /home/stakehol/public_html/pdf-mapping.txt
chown stakehol:www-data /home/stakehol/public_html/pdf-mapping.txt

(用户组根据服务器实际配置调整,比如部分服务器用apache代替www-data)

4. 测试重定向效果

用curl模拟外部盗链请求验证:

curl -I -H "Referer: https://example.com" https://www.stakeholdermap.com/stakeholder-register.pdf

若返回302 Found且Location字段指向对应HTML页面,说明配置生效。

批量管理建议

后续添加数百条URL时,可编写脚本批量生成映射文件:遍历PDF文件目录,自动生成对应HTML路径(大部分场景下PDF与HTML仅后缀不同,特殊路径单独调整),避免手动输入错误。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.24 00:42:40