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

如何在.htaccess的404重定向中传递错误请求URI至PHP文件

解决404重定向后获取原请求URI的方法

你之前直接在ErrorDocument里拼接%{REQUEST_URI}无效,是因为这个指令的URL部分不支持直接解析Apache变量,这些变量只有在mod_rewrite规则里才能正常调用。下面给两种可行的实现方式:

方法一:直接用PHP超全局变量(无需改动现有.htaccess核心规则)

保持你原来的ErrorDocument配置不变:

ErrorDocument 404 /?404

在处理404的PHP文件里,可以通过以下超全局变量获取原请求路径:

  • $_SERVER['REDIRECT_URL']:存储触发404的原始请求URI(比如用户访问了/non-exist-page.html,这个变量的值就是/non-exist-page.html)
  • $_SERVER['REDIRECT_STATUS']:可以用来验证请求是否是404触发的,值为404

示例代码:

if ($_SERVER['REDIRECT_STATUS'] == '404') {
    $originalUri = $_SERVER['REDIRECT_URL'];
    // 这里写你的业务处理逻辑
    echo "触发404的路径是:" . htmlspecialchars($originalUri);
}

方法二:用mod_rewrite主动传递参数

如果需要更明确地传递参数,可以改用mod_rewrite规则代替直接的ErrorDocument配置,这样能主动捕获并传递原请求路径:
在.htaccess里添加以下规则:

RewriteEngine On
# 排除真实存在的文件和目录,避免误拦截
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
# 重定向到处理页面,传递原路径作为参数,同时返回404状态码
RewriteRule ^(.*)$ /your-404-handler.php?original_uri=$1 [L,R=404]

然后在your-404-handler.php里直接通过$_GET['original_uri']获取原请求路径:

$originalUri = $_GET['original_uri'] ?? '';
if (!empty($originalUri)) {
    // 业务处理逻辑
    echo "触发404的路径是:" . htmlspecialchars($originalUri);
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.07 16:45:39