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

PHP页面路由实现:不存在页面时显示自定义404页面求助

解决PHP页面包含与自定义404的实现问题

看起来你已经搭好了基础逻辑框架,卡在了404页面的触发判断上,我来帮你补全代码,同时补上关键的安全防护细节——毕竟直接用用户传入的参数拼接文件名很容易出现文件包含漏洞。

完整实现代码

<?php
// 定义默认要加载的页面(不带后缀,后面统一拼接)
$default_page = 'show_news';
// 获取page参数:如果URL里没有传page,就用默认值
$page = isset($_GET['page']) ? $_GET['page'] : $default_page;

// 核心安全过滤:只允许page参数包含字母、数字和下划线,防止恶意路径(比如../)
if (!preg_match('/^[a-zA-Z0-9_]+$/', $page)) {
    include '404.php';
    exit; // 终止后续代码执行
}

// 拼接成完整的PHP文件名
$target_file = $page . '.php';

// 检查文件是否真实存在,且是普通文件(不是目录或特殊文件)
if (file_exists($target_file) && is_file($target_file)) {
    include $target_file;
} else {
    // 目标文件不存在时,加载自定义404页面
    include '404.php';
}
?>

代码关键点说明

  • 安全防护:用正则表达式过滤page参数,避免用户传入../../etc/passwd这类恶意路径来读取服务器敏感文件,这是文件包含场景下必须注意的安全点。
  • 默认逻辑:当URL没有page参数时,自动使用show_news作为默认页面,拼接后就是你需要的show_news.php。
  • 404触发条件:当过滤后的参数对应的文件不存在,或者参数本身非法时,都会加载自定义的404.php。

这样修改后,就能完美实现你想要的三个功能:默认加载新闻页面、指定合法页面时加载对应内容、页面不存在时触发自定义404。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 10:26:59