fast-route在apache下的配置

在nginx环境下配置详见项目的文档,以下是在apache环境下的配置。
注意:由于我的测试网站路径是:http://localhost/phalapi/public/site/index
以下配置中的 “/phalapi/public/” 需要替换成你实际的url base目录(不包含域名),一般是“/”

1,配置apache的rewrite重定向
先查看http.conf文件,确保已经启用 mod_rewrite模块 (即将前面的#去掉)
LoadModule rewrite_module modules/mod_rewrite.so

2,在配置文件中增加
<IfModule mod_rewrite.c>
 RewriteEngine on
 RewriteCond %{REQUEST_FILENAME} !-d
 RewriteCond %{REQUEST_FILENAME} !-f
 RewriteRule ^/phalapi/public/([a-zA-Z0-9]+)/([a-zA-Z0-9]+)$ /phalapi/public/index.php?/$1/$2 [QSA,PT,L]
</IfModule>
这段作用是:服务器找不到http://localhost/phalapi/public/site/index目录时,重定向到主页 /phalapi/public/index.php,并且把site和index 组合成“/site/index”作为GET参数传递给index.php脚本。
完成配置后重启apache,再访问http://localhost/phalapi/public/site/index就会有输出。
以下是测试的路由配置,注意替换/phalapi/public/为你的实际路径 (不包含域名)
        'routes' => array(
            array('GET', '/phalapi/public/site/index', 'Site.Index'),
            array('GET', '/phalapi/public/hello/world', 'Hello.World'),
            array('GET', '/examples/curd/get/{id:\d}', 'Examples_CURD.Get'),
        ),

1 个评论

实际测试 这样写也是可以的:
RewriteRule ^/phalapi/public/([a-zA-Z0-9]+)/([a-zA-Z0-9]+)$ /phalapi/public/index.php [QSA,PT,L]
奇怪吧,不需要传GET参数。

查看fastroute的Lite代码,究其缘由:

// Fetch method and URI from somewhere
$httpMethod = $_SERVER['REQUEST_METHOD'];
$uri = urldecode(parse_url($_SERVER['REQUEST_URI'], PHP_URL_PATH));
$routeInfo = $dispatcher->dispatch($httpMethod, $uri); //分发

原来如此,路由是根据$_SERVER['REQUEST_URI'] 分发的,并没有用到index.php后面的参数。

所以,根据'routes'路由配置项:array('GET', '/phalapi/public/site/index', 'Site.Index')
$_SERVER['REQUEST_URI']的值等于 '/phalapi/public/site/index', 分发到 'Site.Index'接口

弄明白了吧。 还不明白的话,echo $_SERVER['REQUEST_URI'] 的值,看看结果是不是域名后的那一段url。

要回复文章请先登录注册