5

鉴于此路径:/page(/:pageID),我如何允许以下变体:

  • /page/page/(即使缺少 pageID 部分。
  • /page/1/page/1/

谢谢你。

4

5 回答 5

8

您必须以这种方式定义您的路线:

$app->get('/page(/:id/?)', function ($id = NULL) use ($app) {
    ; // your code
});
于 2012-09-13T16:24:19.447 回答
4

@inst 提供的答案在这里不起作用(在 XAMPP 上运行的 Slim 2.0.0):/page/ 给出 404。

这适用于所有四种情况:

$app->get('/page(/)(:id/?)', function ($id = NULL) use ($app) {
  echo 'success';
});
于 2012-12-14T17:25:10.590 回答
2

文档中所述,可选段可能会根据使用情况而不稳定。例如,用 Fabien Snauwaert 给出的答案,以及以下路线:

/:controller(/)(:action(/)(:overflow+/?))
/:controller(/)(:action(/:overflow+/?))

如果未填写所有参数,则在获取参数值时,这些将位于右侧的位置,从而导致action == controllerand overflow == action

为了防止这种情况,一个简单的解决方案是将可选的斜杠放在路由的末尾。

/:controller(/:action(/:overflow+))/?
/:controller(/:action(/:overflow+))(/)

而且它更具可读性,不是吗?

我无法评论其他答案,因此我在这里写了有关 Igor 回复的详细信息。

这种方法的一个“问题”是,如果用户试图访问一个不存在的页面,并且还使用尾部斜杠,那么将是一个 301 重定向以显示一个 404 页面。也许有点奇怪。

于 2013-04-10T19:07:31.770 回答
1

我发现这种方法可以在启用 Apache mod_rewrite 的情况下实现这一点。片段.htaccess

RewriteEngine On

# remove trailing slash
RewriteCond %{HTTPS} off
RewriteRule ^(.+[^/])/$ http://%{HTTP_HOST}/$1 [R=301,L]
RewriteCond %{HTTPS} on
RewriteRule ^(.+[^/])/$ https://%{HTTP_HOST}/$1 [R=301,L]
于 2013-03-30T21:11:34.377 回答
1

Slim V3 的示例:

/[{param1:[0-9]+}[/[{param2:[0-9]+}[/]]]]

这将包括:

/
/1
/1/
/1/2
/1/2/
于 2020-03-27T08:32:21.897 回答