PHP重定向503而不更改URL

时间:2011-03-22 21:10:01

标签: php redirect error-handling http-headers

我做的是在输出任何内容之前在我的图片页面的最顶部进行一些URL解析:

foobar.com/pictures.php/2134613514/nice-sunset

如果出于任何原因出错,我想将用户发送到我的错误页面。

对于404,403等我使用.htaccess重定向到同一页面,这很容易:

ErrorDocument 401 /error.php?e=401
ErrorDocument 402 /error.php?e=402
ErrorDocument 403 /error.php?e=403

所以我在pictures.php中所做的是:

try
{
    // parse PATH_INFO, grab image from db, ...
}
catch (Exception $e) // if that goes wrong for any reason
{
    whack_error_to_log( $e );
    header("Location: /error.php?e=503");
    exit();
}

让我感到不安的是,用户会看到 foobar.com/error.php?e=503 作为网址,我希望他能看到 foobar.com/pictures / 2134613514 / nice-sunset ,因为理想情况下,一旦我发现错误,网址就会重新启动......

2 个答案:

答案 0 :(得分:2)

试试这个:

try
{
    // parse PATH_INFO, grab image from db, ...
}
catch (Exception $e) // if that goes wrong for any reason
{
    whack_error_to_log( $e );
    $_GET['e'] = 503;
    include 'error.php';
    exit();
}

它是一个黑客,但它应该工作

答案 1 :(得分:1)

包含脚本文件而不是重定向到它:

whack_error_to_log( $e );
$_GET['e'] = '503';
include 'error.php';
exit();