2015-06-07 16:12:50 5339次浏览 2条回答 0 悬赏 10 金钱

假如我想实现这样的,访问
'info/<type:(area|cat)>-<v1:\d+>-<v2:\d+>-<v3:\d+>/' => 'info/list',
我发现当我结尾加了那个 /,他会提示报错 404 NotFound。仔细跟踪代码,生成的匹配规则是:
#^info/(?P<type>(area|cat))-(?P<v1>\d+)-(?P<v2>\d+)-(?P<v3>\d+)/(?P<page>(\d+))$#u,结尾的斜杠在 https://github.com/yiisoft/yii2/blob/master/framework/web/UrlRule.php#L194 这一行被强制去掉,如果我不要结尾的斜杠,就可以访问正常。

$this->pattern = '#^' . trim(strtr($this->_template, $tr), '/') . '$#u';

我现在需要实现的是必须以 / 斜杠结尾才可以访问。yii2却因为trim了两边的,应该改成 ltrim()

  • 回答于 2016-09-21 10:54 举报

    找到解决办法了,例如有条规则
    'info/<type:(area|cat)>-<v1:\d+>-<v2:\d+>-<v3:\d+>/' => 'info/list'

    修改成

    'info/<type:(area|cat)>-<v1:\d+>-<v2:\d+>-<v3:\d+>/?' => 'info/list',

    修改源码有个不好的地方就是升级带来问题

    觉得很赞
  • 回答于 2017-01-03 16:48 举报

    'info/<type:(area|cat)>-<v1:\d+>-<v2:\d+>-<v3:\d+>\/' => 'info/list',

您需要登录后才可以回答。登录 | 立即注册
phptest
见习主管

phptest

注册时间:2014-06-08
最后登录:2018-12-03
在线时长:9小时54分
  • 粉丝5
  • 金钱118
  • 威望0
  • 积分208

热门问题