您可以通过多种方式做到这一点。
最好、最有效的方法是使用前端 Web 服务器。
您可以轻松设置一些配置,以便将所有旧 URL 重定向到新 URL。
通过 Apache,您可以使用mod_alias
and mod_rewrite
.
Redirect /XXX/onlyinstance.html /new/path
RedirectMatch ˆ/XXX/dummy([\d])+\.html$ /new/path/$1
对于服务器和客户端来说,这都是最有效的方法,因为在服务器级别进行处理,无需初始化 Ruby 解释器。
如果您不能/不想利用服务器设置,您可以决定使用 Rails 本身。
谈论性能,最有效的方法是使用机架中间件这比创建完整的控制器/动作要高效得多。
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
还有一个名为 Redirect 的机架插件它提供了一个很好的 DLS,用于使用 Rack 中间件配置重定向。
只是一个脚注。我不会使用创建额外的路线routes.rb
因为您最终会重复站点 URL 并浪费额外的内存。
也可以看看Rails 中将非 www 请求重定向到 www url