鉴于此路径:/page(/:pageID)
,我如何允许以下变体:
/page
和/page/
(即使缺少 pageID 部分。/page/1
和/page/1/
谢谢你。
您必须以这种方式定义您的路线:
$app->get('/page(/:id/?)', function ($id = NULL) use ($app) {
; // your code
});
@inst 提供的答案在这里不起作用(在 XAMPP 上运行的 Slim 2.0.0):/page/ 给出 404。
这适用于所有四种情况:
$app->get('/page(/)(:id/?)', function ($id = NULL) use ($app) {
echo 'success';
});
如文档中所述,可选段可能会根据使用情况而不稳定。例如,用 Fabien Snauwaert 给出的答案,以及以下路线:
/:controller(/)(:action(/)(:overflow+/?)) /:controller(/)(:action(/:overflow+/?))
如果未填写所有参数,则在获取参数值时,这些将位于右侧的位置,从而导致action == controller
and overflow == action
。
为了防止这种情况,一个简单的解决方案是将可选的斜杠放在路由的末尾。
/:controller(/:action(/:overflow+))/? /:controller(/:action(/:overflow+))(/)
而且它更具可读性,不是吗?
我无法评论其他答案,因此我在这里写了有关 Igor 回复的详细信息。
这种方法的一个“问题”是,如果用户试图访问一个不存在的页面,并且还使用尾部斜杠,那么将是一个 301 重定向以显示一个 404 页面。也许有点奇怪。
我发现这种方法可以在启用 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]
Slim V3 的示例:
/[{param1:[0-9]+}[/[{param2:[0-9]+}[/]]]]
这将包括:
/
/1
/1/
/1/2
/1/2/