使用Aura Router for PHP找不到路由

时间:2015-04-01 15:08:26

标签: php localhost url-routing

该应用使用Aura Router进行路由。访问Web应用程序的index.php只会返回"未找到路由"错误信息。

这是(貌似)相关代码:

$path = parse_url($_SERVER['REQUEST_URI'], PHP_URL_PATH);

$route = $router->match($path, $_SERVER);

if (empty($route)) {
    header("HTTP/1.0 404 Not Found");
    echo 'Route not found';
exit;
     }

我使用wampserver在本地运行它。我有应用程序的路径是localhost /网站

我错过了什么?

3 个答案:

答案 0 :(得分:1)

本手册可以帮助您:https://github.com/auraphp/Aura.Router#handling-failure-to-match

(我是Aura的领导者。)

答案 1 :(得分:0)

您应该检查$path的值并验证它是否正确。我有同样的问题,我意识到我使用了错误的数据。

假设您的网站位于:example.com/path/sub/,并且您希望将所有网址路由到sub/旁边。您的$path应为/,以便$router使用$router->add("home", "/")。{/ 1}}。

如果$path = parse_url($_SERVER["REQUEST_URI"], PHP_URL_PATH);则此值为/path/sub/,那么您的路由器必须指向路线:$router->add("home", "/path/sub/")

你也应该对结束/非常小心,因为可以存在或不存在。

答案 2 :(得分:0)

请按照“getting-started.md”文件中的步骤进行操作。

它帮助了我。

下面的代码段允许路由“/ blog / {id}”,类似于localhost上的以下网址:http://localhost/blog/42

$routerContainer = new RouterContainer();
$map = $routerContainer->getMap();
$map->get('blog.read', '/blog/{id}', function ($request, $response) {
    $id = (int) $request->getAttribute('id');
    echo "You asked for blog entry {$id}.<br/>";        
    httperror(200);
});     
//
// ... Create more routes here ...
//
$request = Zend\Diactoros\ServerRequestFactory::fromGlobals(
    $_SERVER, $_GET, $_POST, $_COOKIE, $_FILES
);
$matcher = $routerContainer->getMatcher();
$route = $matcher->match($request);
if (!$route) {
    $failedRoute = $matcher->getFailedRoute();  
    switch ($failedRoute->failedRule) {
        case 'Aura\Router\Rule\Allows':
            httperror(405);
            break;
        case 'Aura\Router\Rule\Accepts':
            httperror(406);
            break;
        default:
            httperror(404);
            break;
    }
    die();
} 
foreach ($route->attributes as $key => $val) {
    $request = $request->withAttribute($key, $val);
}
$response = new \Zend\Diactoros\Response;
$callable = $route->handler;
$response = $callable($request,$response);