任何人都可以帮助我理解为什么抛出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]
答案 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