如何使用.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
答案 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:,即使它 指的是与服务器相同的主机。