【问题标题】:Allow optional trailing slash when using optional parameter使用可选参数时允许可选的尾部斜杠
【发布时间】:2012-06-28 20:25:48
【问题描述】:

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

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

谢谢。

【问题讨论】:

  • PHP语言和你的问题有什么关系?你当前的 PHP 代码是什么?
  • Slim 是一个 PHP 框架。

标签: php slim


【解决方案1】:

你必须这样定义你的路线:

$app->get('/page(/:id/?)', function ($id = NULL) use ($app) {
    ; // your code
});

【讨论】:

    【解决方案2】:

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

    这适用于所有四种情况:

    $app->get('/page(/)(:id/?)', function ($id = NULL) use ($app) {
      echo 'success';
    });
    

    【讨论】:

    • 您能否解释一下('/page(/)(:id/?)' 部分。问候
    • 我已经为the problem 发布了一个问题。
    【解决方案3】:

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

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

    如果未填写所有参数,则在获取参数值时,这些值将位于右侧,从而产生action == controlleroverflow == action

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

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

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

    我无法评论其他人的答案,所以我在这里写下有关 Igor 回复的详细信息。

    这种方法的一个“问题”是,如果用户尝试访问一个不存在的页面,并且还使用尾部斜杠,则会进行 301 重定向以显示 404 页面。可能有点奇怪。

    【讨论】:

      【解决方案4】:

      我发现这种方法可以在启用 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]
      

      【讨论】:

        【解决方案5】:

        Slim V3 的示例:

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

        这将包括:

        /
        /1
        /1/
        /1/2
        /1/2/
        

        【讨论】:

          猜你喜欢
          • 2012-02-08
          • 2020-03-21
          • 1970-01-01
          • 2012-04-05
          • 2016-03-11
          • 1970-01-01
          • 2011-01-12
          • 1970-01-01
          • 2018-04-02
          相关资源
          最近更新 更多