【问题标题】:How to add status code to Rails public html files如何将状态码添加到 Rails 公共 html 文件
【发布时间】:2017-10-24 20:10:48
【问题描述】:

这可能看起来违反直觉,但我在 public 文件夹中有一个 404.html 页面。使用mypage.com/404.html 将直接点击此页面并显示带有200 的静态HTML 页面。有没有办法继续使用那个确切的页面/位置并将状态更改为404

另一个(非理想)解决方案显然是将 404.html 移动到 views 文件夹并在 ApplicationControllerroutes.rb 中编写一个操作来执行此重定向。

TL;DR:public 中返回带有404 状态代码的404.html 页面。

【问题讨论】:

  • 添加 get '404.html', to:r edirect('/404.html', status: 404) 仍然无法正常工作,因为 Rails 会在公共场合看到 404.html 并完全跳过路由
  • 我理解问题和意图;当然有很多方法可以做到这一点。但是,你为什么要改变这种行为呢? 404.html 也只是一个页面。
  • @kiddorails 能够与查找 404 的状态监视工具一起使用,如果 Rails 堆栈中的某些内容出现故障 - public 中的 404.html 将在几个错误条件下提供服务,但是200 对任何外部服务来说都是成功的。

标签: ruby-on-rails rails-routing


【解决方案1】:

我会特别建议不要在您的应用程序内部进行很多代码更改来实现这一点。

漫长的路:

  1. 删除public/404.html
  2. 在堆栈中添加middleware like this,用于检查状态代码并通过 Rails 管道对其进行路由。

更简单的方法:

在您的反向代理 (nginx/apache/etc) 中编写一条规则,以便在请求 /404.html/404 时提供 404 状态代码。

#nginx
location /404/ {
  return 404;
}

location /404.html/ {
  return 404;
}

【讨论】:

  • nginx conf 更改可能正是我想要的。
猜你喜欢
  • 2014-09-22
  • 2011-05-28
  • 2012-07-03
  • 1970-01-01
  • 1970-01-01
  • 2021-12-18
  • 1970-01-01
  • 2021-01-17
  • 2014-03-19
相关资源
最近更新 更多