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

如何通过.htaccess隐藏PDF文件内下载链接的真实URL路径

解决方案

方案1:极简路径展示(悬停仅显示https://msia.com/)

如果要求鼠标悬停时完全不暴露任何额外路径、参数,直接显示根域名,用会话缓存绑定的方式实现:

  1. 先修改PHP生成PDF链接的逻辑,同时把订单ID和当前访问者的标识绑定存入缓存:
// 生成用户唯一标识,也可以用WP自带的用户session逻辑
$user_sign = md5($_SERVER['REMOTE_ADDR'] . $_SERVER['HTTP_USER_AGENT']);
// 缓存有效期设为24小时,用Redis、APCu、文件缓存都可以
apcu_store('pdf_order_' . $user_sign, $order_id, 86400);
// href直接填根域名,悬停只会显示你需要的https://msia.com/
$url = '<a href="https://msia.com/"><b>Download PDF</b></a>'; 
  1. 在站点根目录的index.php最顶部加校验逻辑,匹配到PDF下载请求就内部转发到处理脚本,不跳转:
// index.php 开头插入
$user_sign = md5($_SERVER['REMOTE_ADDR'] . $_SERVER['HTTP_USER_AGENT']);
$cached_order_id = apcu_fetch('pdf_order_' . $user_sign);
if ($cached_order_id) {
    // 用完就删缓存,避免重复请求冲突
    apcu_delete('pdf_order_' . $user_sign);
    $_GET['key'] = $cached_order_id;
    require __DIR__ . '/wp-content/themes/astra-child/pdf.php';
    exit;
}
// 原有首页逻辑保留

方案2:路径带订单ID(悬停显示https://msia.com/[ID])

如果可以接受展示订单ID,直接用URL重写实现更简单,不需要改首页逻辑:

  1. 修改PHP生成链接的逻辑:
$url = '<a href="https://msia.com/' . $order_id . '"><b>Download PDF</b></a>'; 
  1. 把根目录的.htaccess规则替换成下面的内容,你之前写的规则匹配逻辑是错的,RewriteRule只匹配域名后的路径部分:
RewriteEngine On
RewriteBase /
# 内部转发纯数字路径到PDF处理脚本,不会触发浏览器跳转
RewriteRule ^([0-9]+)$ /wp-content/themes/astra-child/pdf.php?key=$1 [L,NC]

额外说明

  • JS方案完全不可行,PDF阅读器不支持执行JavaScript,也不会解析DOM相关的样式修改,不需要再尝试这个方向
  • 两种方案都是内部转发,用户点击链接后地址栏也不会暴露真实的处理脚本路径,完全符合隐藏需求
  • 如果担心订单ID被恶意遍历,可以额外加签名校验:生成链接时拼接签名参数,在pdf.php里校验签名合法性即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 17:15:03