我正在学习 fatfree 的路线,发现它的行为出乎意料。
这是我在 index.php 中的代码:
$f3 = require_once(dirname(dirname(__FILE__)). '/lib/base.php');
$f3 = \Base::instance();
echo 'received uri: '.$_SERVER['REQUEST_URI'].'<br>';
$f3->route('GET /brew/@count',
function($f3,$params) {
echo $params['count'].' bottles of beer on the wall.';
}
);
$f3->run();
这是我访问的 URL:http://xx.xx.xx.xx:8090/brew/12
我收到 404 错误:
received uri: /brew/12
Not Found
HTTP 404 (GET /12)
奇怪的是,F3 中的 URI 现在是“/12”而不是“/brew/12”,我想这就是问题所在。
当我检查 base.php (3.6.5) 时,$this->hive['BASE'] = "/brew" 和 $this->hive['PATH'] = "/12"。但是如果 F3 只使用 $this->hive['PATH'] 来匹配预定义的路由,它将无法匹配它们。
如果我将路线更改为:
$f3->route('GET /brew',
并使用 URL:http://xx.xx.xx.xx:8090/brew,然后路由匹配没有问题。在这种情况下,$this->hive['BASE'] = "" 和 $this->hive['PATH'] = "/brew"。如果 F3 将 $this->hive['PATH'] 与预定义的路由进行比较,则它们相互匹配。
顺便说一句,我正在使用 PHP 的内置 Web 服务器,并且由于 $_SERVER['REQUEST_URI'] (由 base.php 使用)返回正确的 URI,我认为我的 URL 重写没有任何问题.htrouter.php。
任何想法?我在这里错过了什么?
在此处添加 .htrouter.php 的内容
<?php
#get the relative URL
$uri = urldecode(parse_url($_SERVER['REQUEST_URI'], PHP_URL_PATH));
#if request to a real file (such as a html, image, js, css) then leave it as it is
if ($uri !== '/' && file_exists(__DIR__ . $uri)) {
return false;
}
#if request virtual URL then pass it to the bootstrap file - index.php
$_GET['_url'] = $_SERVER['REQUEST_URI'];
require_once __DIR__ . './public/index.php';