代码之家  ›  专栏  ›  技术社区  ›  Thorsten S.

将旧内容(.html/.php等)重新路由到Ruby on Rails

  •  3
  • Thorsten S.  · 技术社区  · 16 年前

    我已经切换到RubyonRails,现在的问题是重新路由 旧的内容像 XXX/dummy.html XXX/dummy.php 在ROR中。

    最好的解决办法是什么

    1. 孤立内容( XXX/onlyinstance.html )
    2. 具有内部结构的内容,如 XXX/dummy1.html , XXX/dummy2.html

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

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

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

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

    打开重写引擎
    重定向permanent/xxx.php http://XYZ/XXX

    无论出于什么原因,ror都不接受routes.rb…while.html/.xml中的重新路由。 一切正常,.php不起作用。我还不知道为什么。因为WEPPOS回答 是最好的,我会给他50分的赏金,但其他答案都是正确的, 我也会投他们一票。谢谢大家

    3 回复  |  直到 13 年前
        1
  •  4
  •   Community Mohan Dere    9 年前

    你可以用多种方法来做到这一点。

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

    使用Apache,您可以使用 mod_alias mod_rewrite .

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

    这对于服务器和客户机都是最有效的方法,因为在服务器级别处理时不需要初始化Ruby解释器。

    如果不能/wan利用服务器设置,可以决定使用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。

    只是一个脚注。我不会使用 routes.rb 因为你最终会复制你的网址,浪费额外的内存。

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

        2
  •  2
  •   lutz    16 年前

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

    永久移动的HTTP响应状态代码301用于永久重定向。

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

        3
  •  2
  •   Veger    16 年前

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

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

    要修改路由,必须添加 map.resource 到config/routes.rb文件。这实现了到控制器的RESTful路由。通过输入 script/server 命令。稍后,当您有更多的经验时,如果Webrick不够,您可以考虑切换到另一台服务器。

    我建议您首先使用Rails编写一个基本(博客)应用程序,请参见 here . 所以您可以看到Rails使用的部件以及如何使用它们。

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