2011-08-02 54 views
2

我的应用程序中有一个名为'admin'的模块,可以在/ mysite/admin访问。为了提高网站的安全性,我想将这个网址更改为更难以猜测的东西,只有网站管理员才能知道。Yii框架 - 更改模块URL

我试图urlManager的规则,但不能获得期望的结果,例如:

'admin-panel'=>'admin/default/index', 
'admin-panel/login'=>'admin/default/login' 

但这只会为这两个网址。

所以我现在唯一能想到的就是重命名实际的模块。模块名称在整个应用程序中被引用很多,所以这太难了。任何人有任何其他建议?

回答

1
rules=>array(
    'admin-panel'       =>'admin', 
    'admin-panel/<_c:\w+>/<_a:\w+>/<id:\d+>' =>'admin/<_c>/<_a>/<id>', 
    'admin-panel/<_c:\w+>/<_a:\w+>'   =>'admin/<_c>/<_a>', 
    'admin-panel/<_c:\w+>'     =>'admin/<_c>', 
) 

但它只是别名 - 你的管理模块将仍然可以通过/管理/ URL。其实你必须检查用户的访问权限,不要试图隐藏你的管理面板。

+0

是的。你是对的。但我想知道是否有任何方法可以隐藏,限制旧路? – viji

+0

那么,如果请求模块的名字是'admin',那么你可以解析一个路由并抛出403 CHttpException(Forbidden)。它会将用户重定向到/ site/error并显示异常消息。 –

0

查看权威指南中的URL Management (Parameterizing Routes)。 这样的事情应该做的工作:

array(
    '<_c:(admin\-panel)>/<_a>' => 'admin/default/<_a>', 
) 

但是,你只是“改名”的管理模块中的默认控制器,它仍然是在旧的URL访问。

+0

thanx for ur reference。 – viji

0

尝试添加:

'admin-panel'=>'admin', 
'admin-panel/<controller:\w+>'=>'admin/<controller>', 
'admin-panel/<controller:\w+>/<action:\w+>'=>'admin/<controller>/<action>', 
+0

是的。这是工作。但它仍旧可以在旧网址中使用。有没有其他的方式来限制或重定向到指定的路径? – viji

+0

你可以尝试设置一个通过Yii生成错误的“admin”规则 - 我不确定是否会导致问题,否则通过apache设置一些东西(在引导程序重写之前在你的.htaccess中插入规则)或者重命名模块。 – ldg

0
'urlManager'=>array(
     'urlFormat'=>'path', 
     'rules'=>array(
      'module/<module:\w+>/<controller:\w+>/<action:\w+>'=>'<module>/<controller>/<action>', 
      'module/<m:\w+>/<c:\w+>/<a:\w+>'=>'<m>/<c>/<a>', 
     ) 
    ),