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