如何捕获URL用户试图在.htaccess中使用ErrorDocument

时间:2015-04-01 00:55:36

标签: apache .htaccess

所以我在Apache中使用

获取了我的.htaccess文件
ErrorDocument 400 /error.php?e=400
ErrorDocument 401 /error.php?e=401
ErrorDocument 403 /error.php?e=403
ErrorDocument 404 /error.php?e=404
ErrorDocument 500 /error.php?e=500

我希望它能够发送用户尝试访问的网址,例如

ErrorDocument 400 /error.php?e=400&u=URL
ErrorDocument 401 /error.php?e=401&u=URL
ErrorDocument 403 /error.php?e=403&u=URL
ErrorDocument 404 /error.php?e=404&u=URL
ErrorDocument 500 /error.php?e=500&u=URL

有可能吗?

1 个答案:

答案 0 :(得分:1)

无法使用ErrorDocument指令传递请求的URI。替代品是;

1)使用PHP脚本作为错误处理程序,并使用PHP获取请求的URI。

的.htaccess

ErrorDocument 404 /404.php

404.php :     

if (!isset($_GET['search'])) {

        $q = trim($_SERVER['REQUEST_URI'], '/');
        header('Location: http://' . $_SERVER[HTTP_HOST] . '/404.php?search=' . $q);
        die();

} else {

        // your search code...

}

?>

2)使用 mod_rewrite

的.htaccess

Options +FollowSymLinks
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule .* /404.php?search=%{REQUEST_URI} [L,R=404]