에서 나는 Ruby on Rails. Unicode routes로 비슷한 질문을 가지고 있지만 대답은 거기에 나를 위해 작동하지 않는 작업으로 표시.레일 3 : 모음 변이 (또는 다른 유니 코드) 루트
나는 움라우트 (ä)를 포함하는 랜딩 페이지의 기본 경로를 갖고 싶어. SEO 목적과 정확히 같아야합니다.
# encoding: UTF-8
Udb::Application.routes.draw do
get "bonitätsauskunft" => "landing_pages#credit_reference", :as => :lp_credit_reference
내 브라우저에서 http://localhost/bonitätsauskunft
를 입력
No route matches "/bonit%c3%a4tsauskunft"
를 얻을. URL에 움라우트를 인코딩하는 여러 가지 방법이 있기 때문에 쿼리 문자열은 이스케이프 처리 된 경로와 일치하기 전에 이스케이프 처리되지 않았으므로 브라우저에서 사용하는 경로를 알 수 없습니다. 파이어 폭스가 보내는처럼
예를 CGI.escape("bonitätsauskunft") # => "bonit%C3%A4tsauskunft"
를 들어, 자본 C3 대신 C3의 A4와 A4를 확인합니다.
get CGI.escape("bonitätsauskunft")
및
Rack::Utils.escape("bonitätsauskunft")
가 일치하지 않습니다.
get ":page" => "landing_pages#credit_reference", :as => :lp_credit_reference, :page => /bonitätsauskunft/
get ":page" => "landing_pages#credit_reference", :as => :lp_credit_reference, :constraints => {:page => /bonitätsauskunft/}
나를 위해 작동하는 유일한 것은이 어색 :
나는 또한 행운과 노력
# encoding: UTF-8
class UmlautConstraint
def initialize(page)
@page = page
end
def matches?(request)
request.params[:page] == @page
end
end
Udb::Application.routes.draw do
get ":page" => "landing_pages#credit_reference", :constraints => UmlautConstraint.new("bonitätsauskunft")
get "bonitätsauskunft" => "landing_pages#credit_reference", :as => :lp_credit_reference
두 번째 경로, 물론 그래서는 사용할 수 필요 Rails가 UmlautConstraint를 만족시키는 방법을 모르기 때문에 link_to("Bonitätsauskunft", :lp_credit_reference)
과 같은 링크를 생성하는 경로를 지정했습니다.
정상적으로 쉬운 방법이 없습니까? 필자는 지금까지 레일 3이 국제화면에서 더 나아질 것이라고 생각했습니다.
레일 3.0.10, 루비 1.9.2, 승객 3.07 아파치 2.
둘 다 확실한가요? 이는 cgi ("neugründungen")를 얻을 수와 downcase => "landing_pages 번호 신생", :.로 => : lp_startups이 이는 cgi ("neugründungen") => "landing_pages 번호 신생"을 얻을 – Jan