由于我已经完成了我的项目,只是无法理解 url 美化。假设这是我的网址:
localhost/wowwaylabs/trunk/mpi_v1/index.php?r=products/index&catId=1
其中 products 是控制器, index 是该控制器的操作。catId 是我通过 url 传递的参数。我需要美化网址
localhost/wowwaylabs/trunk/mpi_v1/this-is-india-1
其中 1 是我通过的 catId。
为了使 url 美观,您需要在 .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 的情况下保留您的网址。
现在取消注释以下以启用路径格式的 URL(在 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>',
),
),
*/
然后添加'showScriptName'=>false,
同一文件的“urlManager”。它将从 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-无索引/
我认为它会解决你的问题。
假设this-is-india
是一个变量或任意长度(即类别名称可能在长度或语法上大不相同,正如 Pitchinnate 在评论中所建议的那样),那么您可以纯粹使用 url 管理器来执行此操作,而无需像这样编辑您的 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
通过 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
如果您已经在使用 Yii 的 URL 管理器(如果没有按照 Workonphp 的说明打开它)尝试创建一个规则并将其添加到规则的顶部,如下所示:
'<category_id:\w+>' => 'products/index',
这会做什么,如果在 url 中只传递一个参数(即类别名称和 id)并且它是一个字符串/单词(:\w+ 指定这个)而不是一个数字(:\d+),它将默认为产品控制器和索引操作。然后它将$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
}