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

如何在PHP的404页面中显示用户请求的原始URL?

获取404页面的原始请求URL

有两种可靠的方法可以实现这个需求:

方法1:利用Apache的重定向环境变量(无需修改现有.htaccess)

当Apache通过ErrorDocument指令跳转到404页面时,会自动设置几个环境变量保存原始请求信息:

  • REDIRECT_URL:原始请求的路径部分
  • REDIRECT_QUERY_STRING:原始请求的查询参数(如果存在)

你可以在404.php中通过这些变量拼接完整的原始URL:

// 拼接原始URL
$originalUrl = $_SERVER['REDIRECT_URL'];
if (isset($_SERVER['REDIRECT_QUERY_STRING'])) {
    $originalUrl .= '?' . $_SERVER['REDIRECT_QUERY_STRING'];
}

// 安全输出(防止XSS攻击)
echo htmlspecialchars($originalUrl, ENT_QUOTES);

方法2:通过RewriteRule传递原始URL(需要修改.htaccess)

如果环境变量方法不生效(比如服务器配置限制),可以改用RewriteRule捕获原始请求并传递给404.php:

  1. 修改.htaccess文件:
RewriteEngine On
# 检查请求的文件/目录是否存在
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
# 捕获所有不存在的请求,转发到404.php并传递原始URL参数
RewriteRule ^(.*)$ /404.php?original_url=$1 [L,R=404]
  1. 在404.php中获取参数:
// 获取并安全输出原始URL
if (isset($_GET['original_url'])) {
    echo htmlspecialchars($_GET['original_url'], ENT_QUOTES);
}

为什么你之前的方法无效?

  • $_SERVER['REQUEST_URI']:跳转到404.php后,这个变量会变成404.php自身的路径,无法获取原始请求。
  • $_SERVER['HTTP_REFERER']:这个变量仅当用户从其他页面跳转过来时才会存在,直接输入不存在的URL访问时,该变量不会被设置,因此报错。

内容的提问来源于stack exchange,提问作者s.k.paul

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.11 14:30:58