如何在yii2

时间:2019-02-25 14:36:12

标签: url url-rewriting yii2

我想为yii2高级应用程序使用伪造的URL 下面是我要实现的示例

主页

  

www.example.com/er45se5t

用户页面

  

www.example.com/er45se5t/users/index

说明:

此处er45se5t是令牌或标识符。对于每个请求,我都需要将此令牌显示在URL中。

尝试的解决方案:

我试图在会话中保存令牌并进行设置,并将其添加到所有URL

添加了这些规则

'<token:\w+>' => 'site/index',
'<token:\w+>/<controller:\w+>' => '<controller>/index'

问题

我注销后,此会话已清除,无法将此令牌添加到URL。

所以注销后,我希望URL看起来像这样

  

www.example.com/er45se5t

  

www.example.com/er45se5t/site/login

1 个答案:

答案 0 :(得分:0)

您可以添加名为CustomUrlManager的组件,其内容为:


namespace frontend\components;

use yii\web\UrlManager;

class CustomUrlManager extends UrlManager
{
    public function createUrl($params)
    {
        $defaultToken='er45se5t';

        if( isset($params['token']) ){
            //you can add whatever here
            $token=$params['token'];
            unset($params['token']);
        } else {
            //you can add whatever here
            $token=$defaultToken;
        }

        $url = parent::createUrl($params);


        if( $url == '/' ){
            return '/'.$token;
        }else{
            return '/'.$token.$url;
        }
    }
}

并在配置文件中作为组件:

'urlManager' => [
'enablePrettyUrl' => true,
'showScriptName' => false,
'class'=>'frontend\components\CustomUrlManager',
'rules'=>[

]

],

您可以将www.example.com/重定向到默认控制器上的某些www.example.com/er45se5t