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

2023-12-06

我已切换到 Ruby on Rails,当前的问题是重新路由 旧内容如XXX/dummy.html or XXX/dummy.php in RoR.

到底什么是最好的解决方案

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

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

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

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

所以在public目录下添加一个.htaccess文件 和写

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

无论出于何种原因,RoR 不接受在routes.rb 中重新路由...而.html/.xml 一切顺利,.php 无法运行。我还没找到原因。因为 weppos 回答 是最好的,我将奖励他 50 点赏金,但由于其他答案是有效的, 我也会投票给他们。谢谢你们


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

最好、最有效的方法是使用前端 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

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

将旧内容(.html/.php 等)重新路由到 Ruby on Rails 的相关文章

随机推荐

  • if else 语句反转

    我想要的结果是第二个 if else 语句 如果代码不在列表中 则发出警报 我不明白为什么第一个 if else 语句失败 我认为只需反转第二个 if else 语句 我误解了什么吗 https jsfiddle net e6qohvhc
  • 如果值比闭包寿命更长,那么在闭包之间共享引用的正确方法是什么?

    我想分享两个闭包之间的引用 在一个闭包中可变地 这是一种人为的情况 但我发现在学习 Rust 的背景下它很有趣 为了使它工作 我必须利用Rc Weak and RefCell 有没有更简单的方法来实现这一目标 use std cell Re
  • 多个 和 标签

    我正在尝试创建一个非常简单的 Web 应用程序 基本上是为了了解 HTML5 CSS 和 JavaScript 编码的最佳实践 我的应用程序有 3 4 页 每一页都使用相同的菜单标题 所以我想通过将其写入单独的文件 PHP 或 HTML 来
  • get_headers 不一致[关闭]

    这个问题不太可能对任何未来的访客有帮助 它只与一个较小的地理区域 一个特定的时间点或一个非常狭窄的情况相关 通常不适用于全世界的互联网受众 为了帮助使这个问题更广泛地适用 访问帮助中心 运行以下代码 var dump get headers
  • 在 Makefile 中链接 cURL

    通过源代码安装 cURL 后 我需要在 Ubuntu 11 04 中链接 cURL 问题的修正 首先我发现 l必须先于 L然后发现我没有在 makefile 中输入变量 获取 cURL 配置 在我的终端上 curl config libs
  • UIBezierPath + CAShapeLayer - 动画填充一个圆圈[重复]

    这个问题在这里已经有答案了 我正在尝试对 CAShapeLayer 的路径进行动画处理 以便获得圆形 填充 到特定数量的效果 问题 它 有效 但不是AS尽管我认为它可能很顺利 但我想对其进行一些缓和 但因为我正在单独为每个 设置动画 所以我
  • JSONEncoder 不允许将类型编码为原始值

    我正在致力于实施Codable for an enum类型与可能的关联值 由于这些对于每种情况都是独特的 所以我认为我可以在编码期间不带密钥地输出它们 然后简单地看看在解码时可以得到什么 以恢复正确的情况 这是一个非常精简的 人为的示例 演
  • pip install 生成“找不到满足要求的版本”[重复]

    这个问题在这里已经有答案了 我有一个包已上传到 test pypi 我可以在我的计算机上的虚拟环境中安装这个软件包 没有任何问题 pip install index url https test pypi org simple packag
  • 对于某些在线编译器,扫描器 next() 会抛出 NoSuchElementException

    这似乎是一个常见问题 多次询问 但我无法找到这种行为的解释 以下代码可以在一个编译器中运行 但会抛出异常Exception in thread main java util NoSuchElementException在另一个编译器中 Sc
  • Spacy -- ImportError:preshed.maps 未导出预期的 C 函数 map_clear

    我正在尝试导入spacy徒然 gt gt gt import spacy Traceback most recent call last File
  • 如何将Flash(.swf)放入页面中?

    我计划使用 swf 文件作为标题 这是行不通的 img src exactheader swf width 650 height 140 你能告诉我怎么做吗 试试这个
  • 集群内无法访问 Kubernetes POD

    我尝试安装Kubernetes with kubeadm在 3 个虚拟机上Debian我的笔记本电脑上的操作系统 一个作为主节点 另外两个作为工作节点 我完全按照教程做的kubernetes io建议 我用命令初始化了集群kubeadm i
  • NSUserDefaults 无法在带有 Watch OS2 的 Xcode beta 上工作

    我刚刚安装了最新的 Xcode 测试版来尝试Swift 2以及对 Apple Watch 开发部分所做的改进 我实际上很难弄清楚为什么这个基本NSUserDefaults之间共享信息的方法iOS and 观看 OS2不工作 我跟着this
  • Python - 查找第二小的数字

    我在这个网站上找到了这段代码来查找第二大数字 def second largest numbers m1 m2 None None for x in numbers if x gt m1 m1 m2 x m1 elif x gt m2 m2
  • 在测试类中模拟私有静态最终变量

    我想测试的类中有一些私有静态最终字段 就像下面这样 public class ClassToTest private static final Myclass myclass MyClassFactory getMyClass type f
  • ffmpeg 在 iOS5.1 中不会 ./configure

    我试图在 iOS5 1 armv7 上构建 ffmpeg 当我尝试像这样运行 configure 时 configure disable doc disable ffmpeg disable ffplay disable ffserver
  • Pyodbc - “未找到数据源名称,并且未指定默认驱动程序”

    我很难得到pyodbc工作 我有unixodbc unixodbc dev odbc postgresql pyodbc安装在我的 Linux Mint 14 上的软件包 我对自己找到解决方案失去了希望 感谢任何帮助 详情请参阅下面 Run
  • 如何在还使用 keycloak 提供网页的客户端上使用计划任务?

    我在用着Spring Boot and Keycloak开发一个网络应用程序 然后我写了一个计划任务 我正在使用KeycloakRestTemplate向另一个应用程序询问一些数据 如下所示 Override Scheduled cron
  • 增加 Java.sql.date/时间的最佳方法是什么?

    我有一个问题 我有一个 MySQL 数据库将日期和时间存储在单独的列中 但是 在 Java 代码中 我需要将数据库中日期和时间的结果时间戳增加分钟 小时或天 然后更新数据库中的相应列 我目前在 Java 中使用 Java sql date
  • 将旧内容(.html/.php 等)重新路由到 Ruby on Rails

    我已切换到 Ruby on Rails 当前的问题是重新路由 旧内容如XXX dummy html or XXX dummy php in RoR 到底什么是最好的解决方案 孤立的内容 XXX onlyinstance html 具有如下内