我为几个搜索结果页面设置了友好的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。这将有助于谷歌理解它们之间的关系,并且不会有重复的内容。
我把我的友好URL路由在routes.yml
的顶部,并希望有一个神奇的匹配,但URL参数在symfony完成的检查中不被识别。我查了一下斯特劳特,没找到。这可能吗?
我最终为这些路由编写了一个自定义路由类,该类在调用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
加入路由。yml条目。
尝试使用自己的路由:
friendly_search_resultpage:
class: YourRouteClassName
...
并通过具体的规范化重载sroute::generate()(返回规范化的URL)。
这个重定向与301在我的项目在最后的sf1.4修订。