2

如何使用 404 将 URL 传递给我的 404.html 页面.htaccess

例如,如果我访问一个无效页面:/user/123

RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
ErrorDocument 404 /?404.php?error_path={???}
                                         ^
=========================================^ 

导致 404 重定向到/404.php?error_path=/user/123

4

3 回答 3

4

ErrorDocument不是 mod_rewrite 的一部分,这是无效的。这是你要找的吗?

RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
Rewriterule ^(.*) /404.php?error_path=$1 [R=301,L]
于 2014-03-18T02:12:37.537 回答
3

在 apache 2.4 及更高版本上,您可以使用带有 ErrorDocument 指令的 mod-rewrite 变量:

ErrorDocument 404 /404.php?uri=%{REQUEST_URI}

这将在内部将 404 uri 发送到您的 404.php 页面,您可以使用 404.php 中的以下代码对其进行操作

<?php
echo "the broken uri is $_GET['uri']";
?>
于 2016-11-09T14:18:29.127 回答
1

您不能使用 ErrorDocument 指令将引发错误的站点的路径附加到显示的错误页面的 URL。但是,当您使用 PHP 时,您可以使用$_SERVER["REDIRECT_URL"]错误处理脚本中的全局值。

有关详细信息,请参阅http://httpd.apache.org/docs/current/custom-error.html#variables

重定向到另一个 URL 可能很有用,但前提是可以传递一些信息,然后这些信息可以用来更清楚地解释或记录错误情况。

为了实现这一点,当发送错误重定向时,将设置额外的环境变量,这些环境变量将从提供给原始请求的标头中生成,方法是在原始标头名称前加上“REDIRECT_”。这为错误文档提供了原始请求的上下文。

例如,除了更常见的环境变量之外,您可能还会收到以下内容。

REDIRECT_HTTP_ACCEPT=*/*, image/gif, image/jpeg, image/png
REDIRECT_HTTP_USER_AGENT=Mozilla/5.0 Fedora/3.5.8-1.fc12 Firefox/3.5.8
REDIRECT_PATH=.:/bin:/usr/local/bin:/sbin
REDIRECT_QUERY_STRING=
REDIRECT_REMOTE_ADDR=121.345.78.123
REDIRECT_REMOTE_HOST=client.example.com
REDIRECT_SERVER_NAME=www.example.edu
REDIRECT_SERVER_PORT=80
REDIRECT_SERVER_SOFTWARE=Apache/2.2.15
REDIRECT_URL=/cgi-bin/buggy.pl

REDIRECT_ 环境变量是根据重定向之前存在的环境变量创建的。它们使用 REDIRECT_ 前缀重命名,即 HTTP_USER_AGENT 变为 REDIRECT_HTTP_USER_AGENT。

REDIRECT_URL、REDIRECT_STATUS 和 REDIRECT_QUERY_STRING 保证被设置,并且只有当它们在错误条件之前存在时才会设置其他标头。

如果 ErrorDocument 目标是外部重定向(以 http: 之类的方案名称开头的任何内容,即使它引用与服务器相同的主机),这些都不会设置。

于 2015-01-29T16:36:43.237 回答