0

我为几个搜索结果页面设置了友好的 URL,每个页面都使用了自定义路由:

friendly_search_resultpage:
  url: /products/my-friendly-alias
  param:
    module: products
    action: search
    querystring: searchattribute
    querystring2: searchattribute2

这很好用,但是当直接进行搜索(即浏览到/products/search?querystring=search...)时,我想设置一个<link rel="canonical">包含匹配的友好 URL。这将有助于 Google 了解这种关系并且不存在重复的内容。

我将友好的 URL 路由放在顶部,routes.yml并希望有一个神奇的匹配,但是在 symfony 所做的检查中无法识别 URL 参数。我已经深入研究了 sfRoute,但没有运气。是否可以?

4

2 回答 2

0

我最终编写了一个自定义路由类来用于这些路由,它在调用 url_for() 时执行。这是代码:

<?php
class mySearchFriendlyRoute extends sfRoute
{
  public function matchesParameters($params, $context = array())
  {
    // I can't find symfony sorting parameters into order, so I do
    // (so that foo=x&bar=y is treated the same as bar=y&foo=x)
    ksort($params);
    $mine = $this->defaults;
    ksort($mine);
    if ($params == $mine) {
      return true;
    }
    return false;
  }
}

要使用,请添加class: mySearchFriendlyRoute到 routes.yml 条目。

于 2013-01-11T14:54:52.567 回答
0

尝试使用您自己的路线:

friendly_search_resultpage:
  class: YourRouteClassName
...

并通过具体的规范化重载 sfRoute::generate() (返回规范的 URL)。

在上次 sf1.4 修订后,这在我的项目中重定向为 301。

于 2013-01-11T16:17:26.303 回答