如何在浏览器的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'
请逐步解释。
如果我找到的链接与此
有关答案 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
}
请确保您的加密方法返回网址安全字符串。