我为一些搜索结果页面设置了友好的URL,每个页面使用自定义路径:
friendly_search_resultpage:
url: /products/my-friendly-alias
param:
module: products
action: search
querystring: searchattribute
querystring2: searchattribute2
这很好用,但直接进行搜索(即浏览/products/search?querystring=search...
)时,我想设置一个包含匹配的友好URL的<link rel="canonical">
。这有助于Google了解这种关系,并且没有重复的内容。
我将友好的URL路由放在routes.yml
的顶部并希望进行魔术匹配,但是在symfony进行的检查中无法识别URL参数。我已经挖了sfRoute,没有运气。有可能吗?
答案 0 :(得分: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条目。
答案 1 :(得分:0)
尝试使用您自己的路线:
friendly_search_resultpage:
class: YourRouteClassName
...
并通过具体的cannonicalization(返回规范URL)重载sfRoute :: generate()。
在上一次sf1.4修订版本的项目中重定向为301。