标题不起作用,显示空白页而不是404

时间:2015-10-13 00:12:01

标签: php apache redirect header

任何人都可以帮助我理解为什么抛出HTTP重定向的标头在这段代码中不起作用?如果我的路线有效,那么它会显示所谓的页面。但是当路线不匹配(存在)时,它不会抛出404页面,只显示空白页面。

它可能与WAMP设置(Apache,PHP.ini)有关,还是与.htaccess文件有关?

我正在使用dannyvankooten @ https://github.com/dannyvankooten/AltoRouter

中的AltoRouter类

谢谢!

前端控制器(index.php):

$router = new router();

$router->map('GET', '/welcome/', 'WelcomeController#hello', 'welcome_hello');

$match = $router->match();

if ($match === false)
{
    header("HTTP/1.0 404 Not Found");
}

else
{
    list($controller, $action) = explode('#', $match['target']);

    if (is_callable(array($controller, $action)))
    {
        $obj = new $controller();
        call_user_func_array(array($obj, $action), array($match['params']));
    }

    else
    {
        header("HTTP/1.0 500 Internal Server Error");
    }
}

.htaccess文件

RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule . index.php [L]

1 个答案:

答案 0 :(得分:0)

我无法使用您的代码在我的本地计算机上重现这一点。但请注意,我必须进行以下更改:

此软件包的根类是new AltoRouter()而不是new router(),您是否有可能拥有类似方法的另一个路由器()类?

标题可能仍设置为404,但未提供自定义内容以在页面上显示。浏览器在不同情况下显示不同的错误页面。在以下示例中,我提供了一个自定义消息进行确认。 由于浏览器的响应方式不同,可以缓存响应等。我使用Postman对此进行了测试 - 您可以使用许多其他工具。

此代码示例为我成功运行:     

$router = new AltoRouter();

$router->map('GET', '/welcome/', 'WelcomeController#hello', 'welcome_hello');

$match = $router->match();
// var_dump($match); // dump or breakpoint/xdebug here to avoid testing other logic.

if ($match === false)
{
    header("HTTP/1.0 404 Not Found");
    echo "That URL doesn't exist";
} else {
    echo "Route matched!<br>";
    echo "<pre>".print_r($match, true)."</pre>";
}

我用php -S localhost:8088 alto_router.php

运行文件
GET localhost:8088/Welcome -> 404
GET localhost:8088/welcome -> 404
GET localhost:8088/Welcome/ -> 404
GET localhost:8088/welcome/ -> 200