如何隐藏浏览器URL中的所有内容(id),除了yii中的站点名称和控制器名称?

时间:2013-06-20 08:54:22

标签: url yii

如何在浏览器的URL中隐藏/加密除站点名称和控制器名称之外的所有内容(id)? 我认为UrlManager可以做到,但我不知道怎么做?需要在ROR

中进行类似的网址映射

我的网址管理员代码

'urlManager'=>array(
        //'urlFormat'=>'path',
        'showScriptName'=> false,
        'rules'=>array(

            '<controller:\w+>/<id:\d+>'=>'<controller>/view',
            '<controller:\w+>/<action:\w+>/<id:\d+>'=>'<controller>/<action>',
            '<controller:\w+>/<action:\w+>'=>'<controller>/<action>',
        ),
    ), 

我想在每个操作之间添加一个随机数(对于安全的我的网址)

ROR例如:

   map.connect 'by/:develop_name',
    :controller => 'developer',
    :action => 'builder_projects' 

请逐步解释。

如果我找到的链接与此

有关

LINK1
LINk2

2 个答案:

答案 0 :(得分:2)

您只需要适当地指定您的申请路线。在继续之前,您应该阅读Yii指南的URL management章节。

您要做的是在规则中使用named parameters,这意味着规则定义如下所示:

'by/<id:\w+>' => 'developer/builder_projects'

此规则采用http://site.com/index.php/by/42形式的网址,并将其路由到控制器developer,操作builder_projects,参数id等于42(这是什么正则表达式\w+匹配)。

路由在application configuration file中指定为urlManager组件的参数:

'urlManager' => array(
    'urlFormat' => 'path',
    'rules'     => array(
        'by/<id:\w+>' => 'developer/builder_projects'
        // more rules
    ),
),

答案 1 :(得分:0)

你可以做的是定义一个对称加密/解密的辅助函数:

class Helper {

    public static function myCrypt($data, $decrypt = false){
        //Logic to encrypt/decrypt

        return $result;
    }
}

然后当您创建网址时,您可以执行以下操作:

$this->createUrl("myRoute", array("secret_id" => Helper::myCrypt($secret_id)));

然后在控制器操作中解析为您可以执行此操作:

public function actionMyRoute($secret_id){
    $secret_id = Helper::myCrypt($secret_id, true);

   //Do what you need to do with the decrypted id
}

请确保您的加密方法返回网址安全字符串。