htaccess errordocument 404并将url传递给路径

时间:2014-03-18 00:08:59

标签: php .htaccess errordocument

如何使用.htaccess

将404'd网址传递到我的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

3 个答案:

答案 0 :(得分:4)

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

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

答案 1 :(得分:2)

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

答案 2 :(得分: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:,即使它   指的是与服务器相同的主机。