【问题标题】:how to rewrite url in Yii?如何在 Yii 中重写 url?
【发布时间】:2014-11-06 14:19:05
【问题描述】:

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

【问题讨论】:

  • 在 url 上设置光标 -> 选择部分 url -> 编写新的 url -> 你如何重写 url :) 抱歉,只是开玩笑

标签: php yii url-routing


【解决方案1】:

要从 url 中删除 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>',
            ...
        ),
        ...
    ),
...
),

这意味着 URL mysite.com/contact.php 将呈现站点/联系人路由。

编辑

回答您的问题“不,我希望它呈现 mysite.com/one,其中一个是字符串 id”:

你必须小心这样短的 url 规则,因为像这样的宽泛的规则会被其他路径拾取,并在你不希望它们被重定向时重新路由用户。但是,要将mysite/one 重定向到mysite/mycontroller/myaction?id=one,您可以使用'&lt;id:\w+&gt;'=&gt;'mycontroller/myaction'

但是,正如我所说,要小心,这将用一个单词路径重新路由所有内容。以这种情况为例:

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

这会将用户重定向到mysite/mycontroller/myaction?id=user

【讨论】:

  • 谢谢,但是关于一个网址,例如:mysite.com/controller/action?id=one,如何将其更改为 mysite.com/action
  • mysite.com/contact.php?id=1 应该呈现mysite.com/site/contact/id/1,这不是你的意思吗?
  • 不,我希望它呈现 mysite.com/one,其中一个是字符串 id
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-10-17
  • 2014-04-09
  • 1970-01-01
  • 2012-04-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多