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

如何通过.htaccess正则为下载PDF文件添加路径名前缀?

实现PDF下载时自动添加文件夹前缀的.htaccess配置方案

要实现下载时自动给PDF文件名添加所在文件夹层级作为前缀,你可以通过Apache的mod_rewrite和mod_headers模块配合正则表达式来完成。下面分两种常见场景给出具体配置:

场景1:添加所有父文件夹层级作为前缀

比如01-science/lesson-1/notes.pdf下载后变为01-science_lesson-1_notes.pdf,配置如下:

RewriteEngine On

# 第一步:提取完整路径和文件名,存入环境变量
RewriteRule ^(.+/)([^/]+)\.pdf$ - [E=DOWNLOAD_FILENAME:%1%2.pdf]

# 第二步:循环替换路径中的斜杠为下划线(处理多层文件夹)
RewriteCond %{ENV:DOWNLOAD_FILENAME} ^(.+)/(.+)\.pdf$
RewriteRule ^ - [E=DOWNLOAD_FILENAME:%1_%2.pdf]

RewriteCond %{ENV:DOWNLOAD_FILENAME} ^(.+)/(.+)\.pdf$
RewriteRule ^ - [E=DOWNLOAD_FILENAME:%1_%2.pdf]

# 第三步:强制下载并设置修改后的文件名
Header set Content-Disposition "attachment; filename=\"%{DOWNLOAD_FILENAME}e\"" env=DOWNLOAD_FILENAME

关键正则解释:

  • 第一个RewriteRule的正则^(.+/)([^/]+)\.pdf$:

    • ^(.+/):捕获从URL开头到最后一个斜杠的所有内容(即所有父文件夹路径,比如01-science/lesson-1/)
    • ([^/]+)\.pdf$:捕获PDF文件名(不含路径,比如notes)
    • 两者组合后存入环境变量DOWNLOAD_FILENAME,初始值为01-science/lesson-1/notes.pdf
  • 替换斜杠的正则^(.+)/(.+)\.pdf$:

    • 匹配仍包含斜杠的文件名,将斜杠前后的内容分成两组
    • 通过%1_%2.pdf将斜杠替换为下划线,重复执行直到路径中无斜杠

场景2:仅添加最后一级文件夹作为前缀

如果你只需要最后一层文件夹作为前缀(比如lesson-1_notes.pdf),可以简化配置:

RewriteEngine On

# 提取最后一级文件夹和文件名
RewriteRule ^.+/([^/]+)/([^/]+)\.pdf$ - [E=DOWNLOAD_FILENAME:%1_%2.pdf]

# 强制下载并设置文件名
Header set Content-Disposition "attachment; filename=\"%{DOWNLOAD_FILENAME}e\"" env=DOWNLOAD_FILENAME

关键正则解释:

  • ^.+/([^/]+)/([^/]+)\.pdf$:
    • ^.+:忽略前面所有层级的文件夹路径
    • ([^/]+)/:捕获最后一级文件夹名称(比如lesson-1)
    • ([^/]+)\.pdf$:捕获PDF文件名(比如notes)
    • 直接组合成带前缀的文件名存入环境变量

注意事项:

  • 确保你的Apache服务器已经启用了mod_rewrite和mod_headers模块
  • 如果文件名或文件夹名包含特殊字符(如空格、非ASCII字符),可能需要额外处理URL编码
  • 可以根据需求修改分隔符(比如把下划线_换成横杠-或其他符号)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.19 04:16:41