我正在玩Silex,尝试在共享虚拟主机上将其用作RESTful json api。主机有Apache Web服务器。我希望Silex应用程序位于我暂时称为experiments/api
的文件夹中,因此应用程序与webroot处于不同的级别。根据{{3}},我放在Silex app文件夹中的.htaccess
文件如下所示:
RewriteEngine On
RewriteBase /experiments/api
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ src/index.php [QSA,L]
(意思是app位于/ experiments / api文件夹中,主控制器文件位于src文件夹中,名为index.php)
这可以完成工作(即,/experiments/api/
的请求被Silex应用程序选中),但不便之处在于应用程序现在看到路径名的这个/experiments/api/
前缀。
例如。当我向/experiments/api/hello
发送GET请求时,我希望应用忽略/experiments/api
部分,并仅匹配/hello
路由。但目前该应用尝试匹配整个/experiments/api/hello
路径。
有没有办法重置Silex的根路由以包含路径的常量部分?我查看了文档,但找不到答案。
答案 0 :(得分:1)
您可以使用mount
feature。
这是一个快速而肮脏的例子:
<?php
// when you define your controllers, instead of using the $app instance
// use an instance of a controllers_factory service
$app_routes = $app['controllers_factory'];
$app_routes->get('/', function(Application $app) {
return "this is the homepage";
})
->bind('home');
$app_routes->get('/somewhere/{someparameter}', function($someparameter) use ($app) {
return "this is /somewhere/" . $someparameter;
})
->bind('somewhere');
// notice the lack of / at the end of /experiments/api
$app->mount('/experiments/api', $app_routes);
//...