wuyuxifeng 2016-01-21 15:03:59 2947次浏览 4条回复 0 2 0

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,'/'); 哪个高手怎么回事?

觉得很赞
  • 回复于 2016-01-21 19:55 举报

    你没有配置后缀,但是你使用了后缀

    2 条回复
    回复于 2016-01-21 22:07 回复
    'enablePrettyUrl' => true,   // pathinfo
    'showScriptName' => false, 	 // ʾindex.php
    'enableStrictParsing' => false, //区分大小
    'suffix'=>'',  //这里是空
    
    回复于 2016-01-22 08:14 回复

    改成html,所有用6189.html访问

  • 回复于 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::setPathInfo

        public function setPathInfo($value)
        {
            $this->_pathInfo = ltrim($value, '/');
        }
    

    yii2只对处理了开头的/,并没有处理结束宿/,为了兼容目录形式访问改成:

        public function setPathInfo($value)
        {
            $this->_pathInfo = trim($value, '/');
        }
    

    就解决了

  • 回复于 2016-01-26 15:14 举报

    这是改核心代码,没有别的办法吗?

  • 回复于 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', 	
                ],
    
您需要登录后才可以回复。登录 | 立即注册