urlManager一个bug你们发现没 [ 技术分享 ]
urlManager的rules如下
'item/<id:\d+>'=>'index/item',
很简单,想实现
http://locahost/item/12
访问 http://locahost/index/item?id=12
是的,问题来了访问
http://locahost/item/12/
通过$_GET[id]
的结果为:12/
哈哈哈,这就是为什么http://www.yiichina.com/topic/6189/ 访问显示404的原因吧!!!
没法只能rtrim($id,'/');
哪个高手怎么回事?
共 4 条回复
-
你没有配置后缀,但是你使用了后缀
共 2 条回复wuyuxifeng 回复于 2016-01-21 22:07 回复'enablePrettyUrl' => true, // pathinfo 'showScriptName' => false, // ʾindex.php 'enableStrictParsing' => false, //区分大小 'suffix'=>'', //这里是空
@wuyuxifeng 改成html,所有用6189.html访问
-
wuyuxifeng 回复于 2016-01-22 13:25 举报
ls,我要实现的目录形式的访问。。。
不要说'suffix'=>'/'难道要把/作为一个后缀???后来又仔细的跟踪了下这个问题:
当'suffix'=>''为空时,有默认控制器:search/tag 访问,
默认的都可以
http://www.bt115.net/search/tag
http://www.bt115.net/search/tag/
默认的都可以
http://www.yiichina.com/user/site
http://www.yiichina.com/user/site/
都是可以的,但是自定义规则:'item/<id:\d+>'=>'index/item',
http://locahost/item/12 可以
http://locahost/item/12/ 不可以
可以参考
http://www.yiichina.com/topic/6191 (正常)
http://www.yiichina.com/topic/6191/ (404哎)追踪代码发现:
yii\web\Request::setPathInfopublic function setPathInfo($value) { $this->_pathInfo = ltrim($value, '/'); }
yii2只对处理了开头的/,并没有处理结束宿/,为了兼容目录形式访问改成:
public function setPathInfo($value) { $this->_pathInfo = trim($value, '/'); }
就解决了
-
wuyuxifeng 回复于 2016-01-28 10:40 举报
有啊,自己继承一个\yii\web\UrlRule,不需要改动核心代码,
class UrlRule extends \yii\web\UrlRule { public $pattern =''; public $route='' ; public function parseRequest($manager, $request){ $pathInfo=$request->getPathInfo(); $pathInfo=trim($pathInfo,'/'); $request->setPathInfo($pathInfo); return parent::parseRequest($manager, $request); } }
在config中,rule使用自己的rule
'rules' => [ ['class'=>'您的路径\UrlRule'], 'index/<id:\d+>'=>'index/item', ],
wuyuxifeng
最后登录:2024-06-11
在线时长:30小时19分
- 粉丝7
- 金钱259
- 威望30
- 积分859