如何制作这样的网址

时间:2013-12-09 08:00:49

标签: php .htaccess yii

嗨我怀疑Yii中的网址重写...

现在,当我从食物清单中打开一个特定的食物项目时,我会得到网址www.example.com/food/12345。这里食物是控制者名称 13245是foodId

但是当我打开那个食物项目(详情)时,我想重写上面的网址,如www.example.com/food/new-sweet-canada。这里新的甜蜜加拿大代表(新的或旧的/测试/来自食物的位置)......

所以我不想吃foodId,而是想从db表中显示该食物的其他属性。我想我必须为此编写网址规则。

我想要它,因为我想让URL SEO友好。

但我不知道怎么做?或者有可能吗?

这是我的url rules array()

   '<controller:\w+>/<id:\d+>'=>'<controller>/view', 
   '<controller:\w+>/<action:\w+>/<id:\d+>'=>'<controller>/<action>',
   '<controller:\w+>/<action:\w+>'=>'<controller>/<action>',

提前致谢

4 个答案:

答案 0 :(得分:1)

你必须编写一个函数,它接收$ _GET变量作为食物的标签,使用$ model-&gt; findByAttribute(array('label'=&gt; $ _ get))找到id然后..通过传递模型来渲染页面。

所以代替你的行动是actionFood($ id)而不是actionFood($ label)

答案 1 :(得分:0)

可能有帮助

Yii::app()->controller->createUrl("food", array("foodId"=>"$old-$test-$location"));

其中$old$test$location包含您的old/test/location

答案 2 :(得分:0)

此示例使用mod_rewrite(将其放在htaccess文件中):

RewriteEngine On
RewriteRule index.php/([A-Za-z0-9]+)/([A-Za-z0-9]+)$ index.php?$1=$2 [QSA,L]
RewriteRule index.php/([A-Za-z0-9]+)/([A-Za-z0-9]+)/([A-Za-z0-9]+)/([A-Za-z0-9]+)$ index.php?$1=$2&$3=$4 [QSA,L]

然后可以通过$ _GET访问您的信息。然后,您可以像www.example.com/asd/qwe一样调用您的页面,对于您的脚本,它就像是被称为www.example.com?asd = qwe

我建议学习一些关于mod重写的内容,因为这个例子不太可能为你开箱即用。

答案 3 :(得分:0)

您可以将食品控制器的规则与其他控制器分开。

 'food/delete/<id:\d+>'=>'food/delete',
 'food/create'=>'food/create',
 // ... also other food controller methods
 'food/<attr:\w+>'=>'food/view',
 '<controller:\w+>/<id:\d+>'=>'<controller>/view', 
 '<controller:\w+>/<action:\w+>/<id:\d+>'=>'<controller>/<action>',
 '<controller:\w+>/<action:\w+>'=>'<controller>/<action>',

Yii url management document可能会有所帮助。