【问题标题】:Cakephp url customisation for SEO用于 SEO 的 Cakephp url 自定义
【发布时间】:2011-10-10 19:43:07
【问题描述】:


我正在开发一个医疗产品搜索网站。每当用户尝试搜索 [公司名称] 药物 [疾病] 时,我都需要在搜索引擎中显示我的网站。为此,我在我的网站中创建了一个页面,该页面从 url 读取公司名称和疾病并列出所有产品。

现在我需要给这个页面一个 URL,比如 www.sitename.com/[COMPANY NAME]_medicine_[DISEASE].html
我正在使用 Cakephp 框架进行开发。无论如何要在 routes.php 中实现这种 url 格式?或者还有其他方法吗?请帮忙。

【问题讨论】:

    标签: url url-rewriting seo cakephp-1.3 url-routing


    【解决方案1】:

    用斜线分隔它们怎么样?

    // www.sitename.com/[COMPANY NAME]/medicine/[DISEASE]
    
    Router::connect('/:company/medicine/:disease', array('controller' => 'diseases', 'action' => 'index'),
                                                   array('pass'=>array('company','disease'),
                                                   'company'=>"[a-zA-Z\.]+*",
                                                   'disease'=>'[a-zA-Z\.]+'));
    

    和控制器

    function diseases($company,$disease){
    
    }
    

    我不确定您是否可以使用下划线代替斜线,我以前从未尝试过。如果你尝试,我想知道结果 =)

    祝你好运

    已编辑:好的,我对这个问题太好奇了,我写了一个这样的路线

    Router::connect('/:company_medicine_:disease', array('controller' => 'pages', 'action' => 'test'),
                                                   array('pass'=>array('company','disease'),
                                                   'company'=>'[a-zA-Z]+',
                                                   'disease'=>'[a-zA-Z]+'));
    

    它不工作u_U

    正如我所怀疑的,问题在于 Cake 认为 custom route element 的名称是 :company_medicine 而不是 :company.. 几分钟后关于/阅读 Cake 的代码我发现了确切的位置Cake 解析路由并提取传递元素的名称。它在 /cake/libs/router.phpCakeRoute 中,方法 _writeRoute() (大约第 1369 行):

    preg_match_all('#:([A-Za-z0-9_-]+[A-Z0-9a-z])#', $parsed, $namedElements);
    

    正如你在正则表达式中看到的,元素的名称可以包含下划线,因此 Cake 认为参数的名称是“:company_medicine”。 所以你有四个解决方案:

    • 使用斜杠作为 URL 的分隔符
    • 更改参数的顺序,使其为medicine_[COMPANY]_[DISEASE]
    • router.php 的第 1369 行修改为此(不推荐,我认为它会破坏插件的路由):

      preg_match_all('#:([A-Za-z0-9]+)#', $parsed, $namedElements);

    • 在 .htaccess 中使用 url rewrite 将所有 [COMPANY]_medicine_[DISEASE] 重定向到 [COMPANY]/medicine/[DISEASE],因此 cake 将看到它被斜线分隔,浏览器将看到它分隔 bu 下划线。 (我还没有测试过,我从来没有为 Cake =P 的 .htaccess 添加另一个规则)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-04-11
      • 1970-01-01
      • 2012-10-27
      • 2014-03-27
      • 1970-01-01
      • 2015-09-07
      相关资源
      最近更新 更多