http访问错误404和传递url到路径


htaccess errordocument 404 and pass url to path

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

例如,如果我访问一个无效的页面:/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

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

RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
Rewriterule ^(.*) /404.php?error_path=$1 [R=301,L]

在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']";
?>

你不能使用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:),即使它指与服务器相同的主机)。