我想在Yii中美化一个URL

时间:2013-01-18 13:24:19

标签: php yii

由于我已经完成了我的项目,所以无法理解url美化。假设这是我的网址:

localhost/wowwaylabs/trunk/mpi_v1/index.php?r=products/index&catId=1

产品是控制器,索引是该控制器的动作。 catId是我通过url传递的参数。我需要美化网址

localhost/wowwaylabs/trunk/mpi_v1/this-is-india-1

其中1是我正在经过的猫。

4 个答案:

答案 0 :(得分:2)

为了使网址更漂亮,您需要在.htaccess文件中添加以下代码行,该文件应位于项目的根文件夹中:

    Options +FollowSymLinks
    IndexIgnore */*
    RewriteEngine on

    # if a directory or a file exists, use it directly
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d

    # otherwise forward it to index.php
    RewriteRule . index.php

它会保留你的网址没有?r。

现在取消注释以下内容以路径格式启用网址(在protected / config / main.php中)

/*
'urlManager'=>array(
    'urlFormat'=>'path',
    'rules'=>array(
    '<controller:\w+>/<id:\d+>'=>'<controller>/view',
    '<controller:\w+>/<action:\w+>/<id:\d+>'=>'<controller>/<action>',
    '<controller:\w+>/<action:\w+>'=>'<controller>/<action>',
  ),
),
*/

然后在同一文件的'urlManager'中添加'showScriptName'=>false,。它将从url中删除index.php。

有关更多信息,请查看以下链接:
http://www.yiiframework.com/doc/guide/1.1/en/topics.url
http://www.sniptrichint.com/tip-of-the-day/beautiful-url-in-yii-without-index/

我认为它会解决你的问题。

答案 1 :(得分:2)

假设this-is-india是一个变量或任意长度(即类别名称可能在长度或语法上变化很大,正如Pitchinnate在评论中所暗示的那样)那么你可以纯粹使用url manager来完成这个,而无需编辑你的像这样的htaccess:

'urlManager'=>array(
    ...
    'rules'=>array(
        '<catName:[0-9a-zA-Z_\-]+>-<catId:\d+>'=>'products/index',
        ...
    ),
    ...
),

这将使用最后一个数字的任意字符组合,并使用最后的数字作为catId,例如:

localhost/wowwaylabs/trunk/mpi_v1/this-is-india-1

将解决

localhost/wowwaylabs/trunk/mpi_v1/index.php?r=products/index&catId=1&catName=this-is-india

类似地;

localhost/wowwaylabs/trunk/mpi_v1/this-is-another-title-or-category-or-whatever-999

将解决:

localhost/wowwaylabs/trunk/mpi_v1/index.php?r=products/index&catId=999&catName=this-is-another-title-or-category-or-whatever

答案 2 :(得分:1)

通过htaccess:)

<IfModule mod_rewrite.c>
RewriteEngine On

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d

RewriteRule ^(.*)$/? index.php?r=$1 [PT,L]

</IfModule>

localhost/wowwaylabs/trunk/mpi_v1/products/index/&catId=1

答案 3 :(得分:0)

如果您已经在使用Yii的URL管理器(如果不遵循Workonphp的说明将其打开),请尝试创建规则并将其添加到如下所示规则的顶部:

'<category_id:\w+>' => 'products/index',

这将做什么,如果只在网址中传递一个参数(即类别名称和ID),它是一个字符串/单词(:\ w +指定这个)而不是一个数字(:\ d +)它将默认为products控制器和索引操作。然后它将$category_id作为变量传递给控制器​​。然后,您需要修改该操作以将id拉出字符串,如下所示:

public function actionIndex($category_id) {
    $pieces = explode('-',$category_id);
    $cat_id = end($pieces); //actual category id seperated from name
    //...rest of code for this function
}