Маршрутизация на статическую html-страницу in / public
Как я могу маршрут /foo
на экране /public/foo.html
в Rails?
3 ответа:
Вы можете сделать это:
добавьте это в свои маршруты.rb файл.
match '/foo', :to => redirect('/foo.html')
обновление
в Rails 4 он должен использовать "get", а не"match":
get '/foo', :to => redirect('/foo.html')
спасибо Грант Хендрикс
это можно сделать без запуска перенаправления. Следуйте инструкциям ниже, чтобы иметь возможность направлять статические файлы в
config/routes.rb
как показано в этом примере:# This route will serve public/index.html at the /login URL # path, and have a URL helper named `login_path`: get "/login", to: static("index.html") # This route will serve public/register.html at the /register # URL path, and have URL helper named `new_user_registration_path`: get "/register", to: static("register.html"), as: :new_user_registration
- создать
config/initializers/static_router.rb
со всем содержимым файла, показанного в конце этого ответа. Убедитесь, что вы переключаете комментарии для строк, относящихся к версии Rails вашего приложения.- перезапустить приложение (первый
bin/spring stop
чтобы быть уверенным, что приложение полностью перезагружено).- начать использовать
static(path)
способ в вашемconfig/routes.rb
.
# File: config/initializers/static_router.rb module ActionDispatch module Routing class StaticResponder < Endpoint attr_accessor :path, :file_handler def initialize(path) self.path = path # Only if you're on Rails 5+: self.file_handler = ActionDispatch::FileHandler.new( Rails.configuration.paths["public"].first ) # Only if you're on Rails 4.2: # self.file_handler = ActionDispatch::FileHandler.new( # Rails.configuration.paths["public"].first, # Rails.configuration.static_cache_control # ) end def call(env) env["PATH_INFO"] = @file_handler.match?(path) @file_handler.call(env) end def inspect "static('#{path}')" end end class Mapper def static(path) StaticResponder.new(path) end end end end
например, в Rails 4 добавить следующий маршрут:
get '/example', :to => redirect('example.html')
Также вам нужно включить статические файлы из каталога "public" в вашей конфигурации:
config.serve_static_files = true
или
config.serve_static_assets = true
Также вам может потребоваться предоставить свой общий каталог в качестве корневого в конфигурации NGINX.