4

我正在使用 PHP 5.4 RC5,并通过终端启动服务器

php -S localhost:8000

目前使用Aura.Router,在根目录下我有 index.php 文件和代码

<?php
$map = require '/Aura.Router/scripts/instance.php';

$map->add('home', '/');

$map->add(null, '/{:controller}/{:action}/{:id}');

$map->add('read', '/blog/read/{:id}{:format}', [
    'params' => [
        'id' => '(\d+)',
        'format' => '(\.json|\.html)?',
    ],
    'values' => [
        'controller' => 'blog',
        'action' => 'read',
        'format' => '.html',
    ]
]);

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

$route = $map->match($path, $_SERVER);
if (! $route) {
    // no route object was returned
    echo "No application route was found for that URI path.";
    exit;
}
echo " Controller : " . $route->values['controller'];
echo " Action : " . $route->values['action'];
echo " Format : " . $route->values['format'];

要求http://localhost:8000/blog/read/1按预期工作。

但是当点 json 或点 html 之类http://localhost:8000/blog/read/1.jsonhttp://localhost:8000/blog/read/1.html请求到来时,php 会抛出

Not Found
The requested resource /blog/read/1.json was not found on this server.

当我使用内置的 php 服务器运行服务器时,我在哪里可以修复不抛出 html 和 json 文件未找到错误?

还是我想去安装 apache 并启用 mod rewrite 和东西?

4

3 回答 3

11

您正在尝试使用 PHP 内置网络服务器的路由器脚本而不指定它:

php -S localhost:8000

而是添加您的路由器脚本:

php -S localhost:8000 router.php

如果请求匹配,路由器脚本应该处理该请求,或者FALSE如果它想要应用标准路由,它应该返回。比较内置网络服务器文档

我不知道Aura.Router是否提供对内置 Web 服务器的开箱即用支持,或者它是否需要您为其编写适配器。就像您需要为该路由器库配置网络服务器一样,您也需要配置内置网络服务器。这就是router.php上面示例中的脚本。

于 2012-01-29T14:24:19.997 回答
3

您可以通过传递 -t 选项来指定文档根目录,如下所示:

php -S localhost:8888 -t c:\xampp\htdocs
于 2013-10-06T15:38:30.993 回答
0

抱歉,我对 Aura.Router 不熟悉。但是,我会使用生产服务器上发生的任何事情。如果您未在测试和生产服务器上同步相同的程序版本,则在项目上线时可能会发现一些意外错误。

于 2012-01-28T20:32:48.330 回答