如何在Yii中重写网址?

时间:2014-11-06 14:19:05

标签: php yii url-routing

我在站点控制器中有一个名为contact的动作,所以当我在浏览器中打开它时,url显示为:mysite.com/index.php/site/contact,我想将其更改为动作的视图名称,所以它应该是mysite.com/contact.php,怎么做?

1 个答案:

答案 0 :(得分:3)

要从网址中删除index.php,您需要将'showScriptName' => false添加到/protected/config/main.php文件中的组件urlManager数组中:

// application components
'components'=>array(
    ...
    'urlManager'=>array(
        'urlFormat'=>'path',
        'showScriptName'=>false,
        'rules'=>array(
            ...
        ),
        ...
    ),
...
),

这会为您的页面mysite.com/site/contact制作路线。要删除/site您需要编辑规则数组,这样的内容可能会有效;

// application components
'components'=>array(
    ...
    'urlManager'=>array(
        'urlFormat'=>'path',
        'showScriptName'=>false,
        'rules'=>array(
            ...
            '<action:\w+>.php'=>'site/<action>',
            ...
        ),
        ...
    ),
...
),

这意味着网址mysite.com/contact.php将呈现网站/联系路由。

修改

回答你的问题&#39;不,我想让它呈现mysite.com/one,其中一个是字符串ID&#39;:

您必须小心这些短网址规则,因为其他路径会选择此类广泛规则,并在您不希望重定向时重新路由用户。但是,要将mysite/one重定向到mysite/mycontroller/myaction?id=one,您可以使用'<id:\w+>'=>'mycontroller/myaction'

但是,正如我所说的,要小心,这将使用单字路径重新路由所有。例如,采取这种情况:

  • 您有一个名为user
  • 的控制器
  • 您想要导航到index控制器的user操作(路由user/index
  • 导航至mysite.com/user(通常会呈现mysite.com/user/index

现在可以将用户重定向到mysite/mycontroller/myaction?id=user