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

使用.htaccess和纯PHP修复路径匹配异常未触发404错误的问题

问题原因

你当前的重写规则使用的是模糊匹配逻辑,只要请求路径中包含home、about关键词就会命中对应规则,不会触发404逻辑,所以会出现homesss、about/a/b/c这类路径无法返回404的问题。

修复方案

第一步:调整.htaccess重写规则

给匹配规则添加正则起止符^(匹配路径开头)和$(匹配路径结尾),实现精确路径匹配,同时推荐添加L(命中后停止匹配后续规则)、QSA(自动保留原请求的查询参数)标识:

RewriteEngine On
Options +FollowSymLinks
# 404页面建议用相对路径,避免额外的302跳转
ErrorDocument 404 /page-not-found.html
# 仅精确匹配 /home 路径
RewriteRule ^home$ index.php?c=home&m=main [QSA,L]
# 仅精确匹配 /about 路径
RewriteRule ^about$ index.php?c=home&m=about [QSA,L]

如果后续需要支持/about/xxx这类带后缀的路径,可根据需求调整正则规则,比如匹配所有以about开头的路径可以写成^about(/.*)?$。

第二步:PHP层加404兜底校验(可选,更稳妥)

因为是纯PHP开发,可以在入口文件index.php中增加控制器和方法的存在性校验,避免异常参数请求返回错误内容:

<?php
// 获取路由参数
$controller = $_GET['c'] ?? '';
$method = $_GET['m'] ?? '';

// 校验路由合法性,不存在则返回404
$controllerFile = __DIR__ . "/controller/{$controller}.php";
if (!file_exists($controllerFile)) {
    http_response_code(404);
    require __DIR__ . '/page-not-found.html';
    exit;
}
require_once $controllerFile;
if (!class_exists($controller) || !method_exists($controller, $method)) {
    http_response_code(404);
    require __DIR__ . '/page-not-found.html';
    exit;
}
// 后续正常执行路由逻辑

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 05:15:04