Маршрутизация на статическую html-страницу in / public


Как я могу маршрут /foo на экране /public/foo.html в Rails?

3   59  

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
  1. создать config/initializers/static_router.rb со всем содержимым файла, показанного в конце этого ответа. Убедитесь, что вы переключаете комментарии для строк, относящихся к версии Rails вашего приложения.
  2. перезапустить приложение (первый bin/spring stop чтобы быть уверенным, что приложение полностью перезагружено).
  3. начать использовать 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

Источник:https://github.com/eliotsykes/rails-static-router

например, в Rails 4 добавить следующий маршрут:

get '/example', :to => redirect('example.html')

Также вам нужно включить статические файлы из каталога "public" в вашей конфигурации:

config.serve_static_files = true

или

config.serve_static_assets = true

Также вам может потребоваться предоставить свой общий каталог в качестве корневого в конфигурации NGINX.