【问题标题】:How to make url like this如何制作这样的网址
【发布时间】:2013-12-09 08:00:49
【问题描述】:

嗨,我对 Yii 中的 url 重写有疑问...

现在,当我从食物列表中打开一个特定的食物时,我会得到 url www.example.com/food/12345。这里 food 是控制器名称13245 是 foodId

但是当我打开该食品以查看(详细信息)时,我想重写上面的 URL,例如 www.example.com/food/new-sweet-canada。这里 new-sweet-canada 代表(新的或旧的/测试/食品塔的位置)......

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

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

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

这是我的 url 规则数组()

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

提前致谢

【问题讨论】:

  • 你是如何让 www.example.com/food/12345 工作的,在 .htaccess 中还是通过 yii 本身?
  • 我刚刚取消了 Yii 默认 ulr 管理器代码的注释

标签: php .htaccess yii


【解决方案1】:

您必须编写一个函数,将 $_GET 变量作为食物的标签,使用 $model->findByAttribute(array('label'=>$_get)) 找到 id,然后.. 渲染通过模型传递页面。

所以你的操作不是 actionFood($id) 而是 actionFood($label)

【讨论】:

    【解决方案2】:

    这可能有帮助

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

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

    【讨论】:

    • 我想更改 url 好友而不是数据库查询
    • www.example.com/food/12345 来自哪里
    • 确保更改或创建变量$old$test$location
    【解决方案3】:

    这个例子使用了 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 rewrite 的知识,因为这个示例不太可能为您开箱即用。

    【讨论】:

      【解决方案4】:

      您可以为食物控制器定义规则,与其他人分开。

       '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 可能会有所帮助。

      【讨论】:

      • 我有不同的方法,比如 create、delte 和所有.. 但我只想将其应用于查看
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-08-05
      • 1970-01-01
      • 2011-10-15
      相关资源
      最近更新 更多