10

正しくない URL を routes.rb の 404 ページにリダイレクトするにはどうすればよいですか? ここで、2 つのサンプル コードを使用します。

# example 1
match "/go/(*url)", to: redirect { |params, request| Addressable::URI.heuristic_parse(params[:url]).to_s }, as: :redirect, format: false

# example 2
match "/go/(*url)", to: redirect { |params, request| Addressable::URI.heuristic_parse(URI.encode(params[:url])).to_s }, as: :redirect, format: false

しかし、「url」パラメーターでロシア語を使用しようとすると、最初の例では 500 ページ (不正な URI) が表示され、2 番目の例では stage.example.xn--org-yedaa​​a1fbbb/ にリダイレクトされます。

ありがとう

4

2 に答える 2

30

カスタム エラー ページが必要な場合は、数週間前に私が書いたこの回答を参照することをお勧めします。


カスタム エラー ルートを作成するには、いくつかの重要な要素が必要です。

->にカスタム エラー ハンドラを追加しますapplication.rb

# File: config/application.rb
config.exceptions_app = self.routes

->でルートを作成します:/404routes.rb

# File: config/routes.rb
if Rails.env.production?
   get '404', :to => 'application#page_not_found'
end

->これらのルートを処理するためにアプリケーション コントローラに追加actions

# File: app/controllers/application_controller.rb
def page_not_found
    respond_to do |format|
      format.html { render template: 'errors/not_found_error', layout: 'layouts/application', status: 404 }
      format.all  { render nothing: true, status: 404 }
    end
  end

これは明らかに比較的基本的なものですが、うまくいけば、何ができるかについていくつかのアイデアを得ることができます

于 2013-10-29T09:33:58.883 に答える