ユーザーが間違ったページにアクセスするたびに、Railsはパブリックフォルダーの404.htmlを表示します。ただし、何も表示せずにブラウザーをルートページにリダイレクトしたいだけです。グロビングしましたが、役に立ちませんでしたが、それでも404ページが表示されています。
# ...
map.root :controller => 'home', :action => 'home'
map.connect '*', :controller => 'home', :action => 'home'
助言がありますか?みんなありがとう!
プロジェクトがRails 3を使用している場合は、この行をroutes.rbに追加するだけです
match '*path' => redirect('/')
編集:あなたがRails 4または5
match '*path' => redirect('/'), via: :get
または
get '*path' => redirect('/')
アーカンの答えが好きです。 1つのポイントは、開発環境でこの動作を望まない場合は、行うことができます-
match '*path' => redirect('/') unless Rails.env.development?
レール4-
(routes.rb)
単純なget
を使用して、すべての不明なルートをリダイレクトできます。
get '*path', to: 'home#index'
POSTとGETリクエストの両方にルーティングを提供したい場合でも、matchを使用できますが、Railsはvia
。
match "*path" => "home#index", via: [:get, :post]
routes.rb
は順次実行されます(指定されたパス構造に適合する最初のルートに一致します)。したがって、一致の下部にワイルドカードキャッチを配置します。
Rails 5.2で、all_storageルートがキャッチオールルートによってピックアップされるため、アップロードされた画像へのリンクが壊れているというバグがあります。この問題はRails githubのrepo、そしてバグが新しいリリースで修正されるまで、誰かが以下のパッチでコメントしました:
routes.rb
最後の直前end
get '*all', to: 'application#index', constraints: lambda { |req|
req.path.exclude? 'Rails/active_storage'
}
次に、アプリケーションコントローラーに以下を追加します。
def index
flash.notice = 'No page found at that address'
redirect_to root_path
end
それを行うにはコントローラーを作成する必要があります
class RedirectsController
def index
redirect_to root_url
end
end
そしてあなたのルートで
map.connect '*', :controller => 'redirects', :action => 'index'