Silex:当应用程序不在webroot级别时重置根路由

时间:2017-01-05 03:51:10

标签: .htaccess silex

我正在玩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的根路由以包含路径的常量部分?我查看了文档,但找不到答案。

1 个答案:

答案 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);

//...