Silex如何使路由结尾的“/”变为可选项?

3

我正在使用Silex 1.1和PHP 5.3,如何使路由中的结尾“/”成为可选项?

目前我有两个做同样事情的路由。

$app->get('/item/{id}/', function( $id ) use ($app) {
  /** Codes Here **/
});
$app->get('/item/{id}', function( $id ) use ($app) {
  /** Codes Here **/
});

是否可以只指定一次路由,结尾处的“/”是可选的?如何实现?
谢谢。

1
如果您在路由定义中加上尾随斜杠,那么没有尾随斜杠的任何请求都将返回301重定向到正确的路由。因此,请定义/item/{id}/,并且对于任何请求 /item/{id} 都应该返回301重定向到/item/{id}/ - Alexandru Guzinschi
谢谢!不确定您是否想发布为回答,以便我可以接受它作为答案。 - forestclown
2个回答

8
如果您在路由中定义了斜杠,没有斜杠的任何请求都将返回一个301重定向到正确的路径。因此,定义 /item/{id}/ ,并且对于任何请求 /item/{id} ,应该返回一个 301 重定向到 /item/{id}/

但是,此时“/item/”将无法访问(找不到“/item/”的路由)。 - GDmac
1
@GDmac 我的解决方案与“/item/”无关,这应该是一个不同的路由。如果你定义它,它就会起作用。 - Alexandru Guzinschi

0

我解决了这个问题,通过在我的请求实例中替换PATH_INFO参数。

$request = Request::createFromGlobals();

$request->server->set('REQUEST_URI', rtrim($request->server->get('REQUEST_URI'), "/"));

$app->run($request);

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接