WordPress插件开发:创建隐藏真实路径的文件下载脚本
WordPress插件实现隐藏真实路径的文件下载
实现步骤
1. 在插件主文件中添加下载处理逻辑
直接在你的插件主PHP文件中插入以下代码,用于注册路由、接收请求并处理下载:
// 允许WordPress识别fn查询参数 add_filter('query_vars', function($vars) { $vars[] = 'fn'; return $vars; }); // 注册/download路由规则 add_action('init', function() { add_rewrite_rule('^download/?$', 'index.php?fn=$matches[1]', 'top'); }); // 处理下载请求 add_action('template_redirect', function() { $filename = get_query_var('fn'); if (!$filename) { wp_die('无效请求'); } // 定义受限文件夹的真实物理路径 // 可根据实际情况调整,比如用插件目录路径:plugin_dir_path(__FILE__) . 'restricted-dir/' $restricted_dir = ABSPATH . 'restricted-dir/'; $file_path = $restricted_dir . basename($filename); // 安全校验:文件存在且可读 if (!file_exists($file_path) || !is_readable($file_path)) { wp_die('文件不存在或无法访问'); } // 输出HTTP下载头 header('Content-Type: application/octet-stream'); header('Content-Disposition: attachment; filename="' . basename($file_path) . '"'); header('Content-Length: ' . filesize($file_path)); // 输出文件内容并终止程序 readfile($file_path); exit; });
2. 刷新固定链接规则
登录WordPress后台,进入「设置」→「固定链接」,随意选择一个链接结构并保存,让新的路由规则生效。
3. 前端使用下载链接
直接使用你提供的HTML链接即可,也可以用WordPress内置函数生成更安全的链接:
<!-- 纯HTML链接 --> <a href="/download?fn=filename.ext">Download my file</a>
// WordPress模板/插件中生成安全链接 echo '<a href="' . esc_url(home_url('/download?fn=' . urlencode('filename.ext'))) . '">Download my file</a>';
关键安全提示
- 防止路径遍历攻击:用
basename($filename)过滤文件名,避免用户输入../../wp-config.php这类恶意路径 - 权限控制:如果需要限制下载权限,可在处理函数开头添加校验,比如:
if (!is_user_logged_in()) { wp_die('请登录后下载'); } - 文件类型限制:只允许下载指定类型的文件,避免安全风险:
$allowed_exts = ['pdf', 'zip', 'ext']; $file_ext = strtolower(pathinfo($file_path, PATHINFO_EXTENSION)); if (!in_array($file_ext, $allowed_exts)) { wp_die('不允许下载该类型文件'); }
内容的提问来源于stack exchange,提问作者Jenemj
相关产品推荐
相关产品推荐

