Rails重定向301编码

我重新创建了一个网站,有很多301处理(从phpurl到Railsurl)。

它完美地适用于:

match "/produits/les-dallages/dallage-riva.html", :to => redirect("/produits/dallages/dalle-riva") 

我的问题是这种旧url(从谷歌网站管理员工具提供):

 "/produits/les-pavages/paves-carres/item/48-pav%C3%A9s-carr%C3%A9s.html" 

编码未被理解,因为url被浏览器转换而Rails不理解带有“é”而不是“%C3%A9”的url…

如何管理这种url?

第二个问题:我可以在routes.rb文件中添加多少条路由(301)?

谢谢

理论上,您可以添加许多路线。 但是,我们不应该在routes文件中添加不必要的内容,因为它会占用内存,并且需要一些时间来处理每个请求的所有路由逻辑,然后才能进入控制器。

如果你有很多url要做重定向,而不是搞乱路由文件,我建议你创建一个控制器来做重定向,因为你可以编写更灵活的代码。 也许你可以创建一个表来存储from_url (旧url)和new_url (用于重定向)。 然后,在新控制器内部,只需在数据库中找到旧URL并进行重定向。

 class RedirectionController < ApplicationController def index redirect = Redirection.find_by_from_url(request.request_uri) if redirect redirect_to redirect.to_url, :status => :moved_permanently else render 'public/404', :status => :not_found, :layout => false end end end 

最后,使用Route Globbing匹配任何URL以进行重定向。 您可以在http://guides.rubyonrails.org/routing.html上查看更多相关信息

 match '/produits/*' => 'redirection#index' 

对于像’é’这样的重音字符,您只需将此值存储在数据库中。 对于MySQL,您应该将数据库服务器配置为存储utf-8并更新database.yml中的连接。

 encoding: utf8 collation: utf8_unicode_ci 

您可以尝试通过以下代码重定向。 它工作得很好。 它必须在文件的开头有# encoding: UTF-8 ,因为有那些重音字符。

 # encoding: UTF-8 class RedirectionController < ApplicationController def index redirect_to "produits/les-pavages/paves-carres/item/48-pavés-carrés" end end