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

如何通过htaccess或PHP实现旧PDF链接通配符重定向至最匹配新版本

实现方案说明

方案1:.htaccess 通配符规则(不推荐)

Apache的mod_rewrite仅支持固定模式的重定向,不具备动态扫描文件、比对版本号的能力。如果用该方案,每次更新版本都需要手动在.htaccess中新增旧版本号跳转到新版本号的规则,维护成本极高,完全不适合版本更新频繁的场景。

方案2:PHP 动态跳转脚本(推荐)

该方案可以自动匹配同型号的最新版本文件,无需每次更新版本手动修改规则,实现成本低、维护方便。

实现步骤

  1. 配置根目录下的.htaccess规则,将/files/目录下不存在的PDF请求转发到处理脚本:
RewriteEngine On
# 仅拦截不存在的PDF文件请求
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^files/([A-Z0-9]+)-[^_]+_(.*)\.pdf$ /pdf_redirect.php?model=$1&filename=$2 [L,QSA]
  1. 新建根目录下的pdf_redirect.php处理脚本,代码示例如下:
<?php
// 基础配置
$fileStoragePath = __DIR__ . '/files/';
$fileAccessBaseUrl = 'https://example.com/files/';

// 过滤参数,避免路径遍历风险
$model = preg_replace('/[^A-Z0-9]/', '', $_GET['model'] ?? '');
$filename = preg_replace('/[^A-Za-z0-9_]/', '', $_GET['filename'] ?? '');
if (empty($model) || empty($filename)) {
    http_response_code(404);
    exit('请求的文件不存在');
}

// 匹配对应型号的所有目标PDF文件
$matchPattern = $fileStoragePath . $model . '-*_' . $filename . '.pdf';
$matchedFiles = glob($matchPattern);
if (empty($matchedFiles)) {
    http_response_code(404);
    exit('请求的文件不存在');
}

// 按版本号自然排序,取最新版本
natsort($matchedFiles);
$latestFileName = basename(end($matchedFiles));

// 执行重定向,如需永久缓存可将302改为301
header('Location: ' . $fileAccessBaseUrl . $latestFileName, true, 302);
exit;

优化建议

如果站点文件量较大、访问量较高,可新增缓存机制:将型号与对应最新版本文件的映射关系存储在缓存文件/数据库中,每次更新版本时主动更新映射关系,避免每次请求都扫描目录,提升响应效率。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 11:24:07