【问题标题】:Reroute old content (.html/.php etc.) to Ruby on Rails将旧内容(.html/.php 等)重新路由到 Ruby on Rails
【发布时间】:2010-01-14 12:05:55
【问题描述】:

我已切换到 Ruby on Rails,我目前的问题是重新路由 RoR 中的 XXX/dummy.htmlXXX/dummy.php 等旧内容。

究竟什么是最好的解决方案

  1. 隔离内容 (XXX/onlyinstance.html)
  2. 内容具有像XXX/dummy1.htmlXXX/dummy2.html这样的内部结构

http://guides.rubyonrails.org/routing.html 没有解释如何 迁移旧内容。

注意:更改旧链接不是一种选择。该网站是托管的,它不是我的 自己的服务器。由于域没有改变,重定向它的解决方案似乎是 没必要……应该有更好的解决方案。

编辑:我发现最好的解决方案实际上是按照 weppos 描述的方式重新路由它。

所以在公共目录中添加一个.htaccess 文件 并写

重写引擎开启
重定向永久/XXX.phphttp://XYZ/XXX

出于某种原因,RoR 不接受在 routes.rb 中重新路由...而 .html/.xml 一切正常,.php 不起作用。我还没弄清楚为什么。因为weppos回答 是最好的,我会奖励他 50 点赏金,但由于其他答案是有效的, 我也会投票给他们。谢谢大家

【问题讨论】:

  • 重新路由是什么意思?将 HTML 文件放在您的 rails 应用程序中,或者将其转换为 Ruby on Rails 以实际替换它?
  • 你有一个用 PHP/(X)HTML/whatever 编写的旧网站。现在您打算学习 RoR 并在实践中做到这一点,除了建立新的存在之外,您还希望将旧链接转换为 RoR。是的,可以简单地将 html 文件放在您的 RoR 目录中的同一位置(但我觉得这有点乱)。但是如果你使用 *.php 结尾,我的服务器会抛出 500 错误并且 development.log 是空的。

标签: html ruby-on-rails routing


【解决方案1】:

您可以通过多种方式做到这一点。

最好和最有效的方法是使用您的前端网络服务器。 您可以轻松设置一些配置,以便将所有旧 URL 重定向到新 URL。

对于 Apache,您可以使用 mod_aliasmod_rewrite

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

这对于服务器和客户端都是最有效的方式,因为在服务器级别进行处理,无需初始化 Ruby 解释器。

如果您不能/不想利用服务器设置,您可以决定使用 Rails 本身。 谈到性能,最有效的方法是使用Rack middleware,这比创建完整的控制器/动作要高效得多。

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

还有一个Rack plugin called Redirect 提供了一个很好的 DLS,用于使用 Rack 中间件配置重定向。

只是一个脚注。我不会使用routes.rb 创建额外的路由,因为你最终会复制你的站点 URL 并浪费额外的内存。

另见Redirect non-www requests to www urls in Rails

【讨论】:

    【解决方案2】:

    迁移是什么意思?我建议重定向客户端以使用 RoR URL。这可以使用 HTTP 301 状态代码来完成。见http://en.wikipedia.org/wiki/HTTP_301

    HTTP 响应状态码 301 Moved Permanently 用于永久重定向。

    这可以在您的 HTTP 服务器的配置中完成。

    【讨论】:

      【解决方案3】:

      您必须重新定义您的应用程序,因为 Rails 使用 RESTful 路由(您可能已经阅读过)。因此,为了有一个处理项目的显示、创建、销毁等的 php 文件,您需要为不同的操作构建项目模型、控制器和视图。

      您可以将静态 HTML 文件复制到公共目录,因为它们是相同的。您使用的结构仍然可以相同。

      为了修改您的路由,您必须将map.resource 添加到您的 config/routes.rb 文件中。这实现了到您的控制器的 RESTful 路由。要开始使用 Rails (WEBrick) 提供的网络服务器,请输入 script/server 命令。以后当你有更多经验时,如果WEBrick不够用,你可以考虑切换到另一个服务器。

      我建议您首先使用 Rails 编写一个基本(博客)应用程序,请参阅here。所以你会看到 Rails 使用了哪些部分以及如何使用它们。

      之后,您可以在 PHP 解决方案中识别这些部分,并且能够更好地转换您的页面。至少当我开始从 PHP 使用/转换到 Rails 时,我遵循了这种方法。

      【讨论】:

      • 其他网站的链接指的是“XYZ/xyz.php”。现在你的意图是,如果是这样。单击链接,您可以将浏览器重新路由到任何内容,即使它不是 PHP。假设您想自动启动 XYZ/xyz 作为 RoR 应用程序,如果是这样的话。在浏览器中插入“XYZ/xyz.php”。如果无法使用状态代码进行重定向,这是否可以通过编程方式实现? RoR(如路由)中是否有能够做到这一点的东西?
      • 我从来没有尝试过,但应该可以这样做:map.resource '/XYZ/xyz.php', :controller => :XYZController, :action => :index,现在 RoR 接管了索引操作。从那里,用户可以完全访问该应用程序。 但是 保留以.php 结尾的 URL,即使不使用 PHP 对我来说也很奇怪。所以在某些时候你真的需要/想要迁移到一个成熟的 RoR 站点......为什么不现在开始并部分转换所有内容?
      猜你喜欢
      • 1970-01-01
      • 2014-09-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-04-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多