2013-01-11 140 views
0

我已經建立了友好的URL幾個搜索結果頁面,使用每個自定義路線:symfony的1.4路由:匹配的路由使用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,沒有運氣。可能嗎?

回答

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條目。

0

嘗試使用自己的路線:

friendly_search_resultpage: 
    class: YourRouteClassName 
... 

和超載sfRoute ::生成()有混凝土cannonicalization(返回規範URL)。

在我上一次sf1.4修訂版時,在我的項目中重定向了301。