0

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

我的网址管理器代码

'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' 

请逐步解释。

如果我发现的链接与此相关,则为夫妇

链接
1 链接2

4

2 回答 2

2

您只需要适当地指定您的应用程序路由。在继续之前,你应该阅读 Yii 指南的URL 管理章节。

您要做的是在规则中使用命名参数,这意味着规则定义如下所示:

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

此规则采用表单的 URLhttp://site.com/index.php/by/42并将其路由到控制器developerbuilder_projects参数id等于 42 的操作(这是正则表达式\w+匹配的内容)。

路由在您的应用程序配置文件中指定为urlManager组件的参数:

'urlManager' => array(
    'urlFormat' => 'path',
    'rules'     => array(
        'by/<id:\w+>' => 'developer/builder_projects'
        // more rules
    ),
),
于 2013-06-20T09:09:03.510 回答
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
}

只需确保您的加密方法返回一个 url 安全字符串。

于 2013-06-20T09:09:24.317 回答