Reroute old content (.html/.php etc.) to Ruby on Rails

前端 未结 3 1164
没有蜡笔的小新
没有蜡笔的小新 2021-01-14 04:31

I have switched to Ruby on Rails and my current problem is to reroute the old contents like XXX/dummy.html or XXX/dummy.php in RoR.

What ex

3条回答
  •  清歌不尽
    2021-01-14 05:11

    You can do this in multiple ways.

    The best and most efficient way is to use your front end web server. You can easily setup some configurations in order to redirect all the old URLs to the new ones.

    With Apache, you can use mod_alias and mod_rewrite.

    Redirect /XXX/onlyinstance.html /new/path
    RedirectMatch ˆ/XXX/dummy([\d])+\.html$ /new/path/$1
    

    This is the most efficient way both for server and client because handled at server level without the need to initialize the Ruby interpreter.

    If you can't/wan't take advantage of server settings, you can decide to use Rails itself. Talking about performance, the most efficient way is to use a Rack middleware which is much more efficient than creating a full controller/action.

    class Redirector
      def self.call(env)
        if env["PATH_INFO"] =~ %r{XXX/onlyinstance\.html}
          [301, {"Content-Type" => "text/html", "Location" => "http://host/new/path/"}, "Redirecting"]
        else
          [404, {"Content-Type" => "text/html"}, "Not Found"]
        end
      end
    end
    

    There is also a Rack plugin called Redirect that provides a nice DLS for configuring redirects using a Rack middleware.

    Just a footnote. I won't creating additional routes using routes.rb because you'll end up duplicating your site URLs and wasting additional memory.

    See also Redirect non-www requests to www urls in Rails

提交回复
热议问题