我正在使用ToroPHP进行路由。
我的代码:
Toro::serve(array(
"/" => "home",
));
Toro::serve(array(
"/website/:string" => "website",
));
// Fired for 404 errors
ToroHook::add("404", function() { echo '404 error'; });
更多代码
Toro:发送到此课程,适用于home
和website
。
class home {
function get() {
echo 'My home';
}
}
class website {
function get($slug) {
echo $slug;
}
}
的.htaccess
这就是我的htaccess文件的样子。在localhost上工作只是一点点改写。
查看最后一行......
RewriteEngine On
RewriteBase /my_localhost_dir/
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond $1 !^(index\.php)
RewriteRule ^(.+)$ index.php/$1 [L]
问题
如果我转到我使用Toro::serve
设置的页面,它就可以正常工作。
如果我转到未定义的网址,则会显示白屏。
我希望通过我添加的钩子能给我“404错误”。我做错了什么?
示例:如果我转到/ nocontent /它会给我一个白色屏幕,并且响应200 ok。
答案 0 :(得分:3)
我认为钩子定义必须首先,即
<?php
ToroHook::add("404", function() {
header('HTTP/1.1 404 Not Found');
echo '404 error';
exit;
});
Toro::serve(array(
"/" => "home",
"/website/:string" => "website",
));
此外,请确保您有一个 .htaccess 文件,根据文档将所有请求重写为 index.php 。我应该知道,作为该项目的贡献者;)
此外,只应对Toro::serve()
进行一次调用;您只需将一个数组传递给它,并将URL模式作为键,并按照上面的示例调用该值作为值。
答案 1 :(得分:1)
确保将所有请求重定向到index.php。这是通过使用mod_rewrite完成的。将以下内容放在.htaccess文件夹中:
RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond $1 !^(index\.php)
RewriteRule ^(.*)$ /index.php/$1 [L]
其次,您使用的是Toro::serve
错误的方法。你不应该多次拨打电话。相反,将多个路由传递给第一个呼叫:
Toro::serve(array(
"/" => "home",
"/website/:string" => "website",
));
最后,在调用serve 之前添加404-hook。否则,将无法找到:
ToroHook::add("404", function() {
echo "404 - Not Found";
});