2011-07-15 80 views
2

在我們的控制器,我們正在進入谷歌流量爲無效的網址PARAM之一:更改PARAMS 3條路線

/搜索/克拉斯=論壇

相反,它應該是:?

/搜索/克拉斯=論壇

目前,我有一些控制器#指數代碼,這是否:

if params[:klass] == "forum" 
     params.delete(:action) && params.delete(:controller) 
     params[:klass] = "forums" 
     @query = params.to_query 
     redirect_to "/search?#{@query}", :status => 301 and return 
    end 

我很好奇,如果在routes.rb中可以做到這一點,所以它不會觸及我們的堆棧,但仍然正常301。我見過正則表達式用於驗證查詢字符串中的某些參數,但沒有人用來重寫這些參數的值。

+1

您可以嘗試使用nginx或apache來處理它 – fl00r

+1

在Apache中使用mod_rewrite – Dex

回答

1

你可以嘗試用nginx的IIS或Apache來處理它,或者您可以使用機架使用此哈克解決方案:

get "/search/" => proc { |env| Rack::Request.new(env).params['klass'] == "forum" ? [ 302, {'Location'=> "/search/?klass=forums" }, [] ] : [ 302, {'Location'=> "/" }, [] ] } 
0

也許你可以用:constraints => {:klass => 'forum'}宣佈這條路線,並與klass正確的值轉發。或者你爲什麼不在控制器中追加缺失的's'?

+0

不,Rails路徑在問號後不能與params一起使用。如果它是'/ search/forum',他可以使用約束 – fl00r