nginx Sinatra头元刷新404

时间:2018-08-29 12:42:39

标签: nginx sinatra refresh nginx-location

由于某种原因,页面正在转发到nginx服务的404页面。除此页面外,该站点正在运行。在我的目标网页上,标题中包含以下内容:

<meta http-equiv="refresh" content="5;URL=/second">

即使硬编码http://mydomain.local/second也提供相同的404。

这是Sinatra部署。

get "/second" do
  @title = "my Title"
  erb :index
end

我在想,也许我在locations中的nginx.conf指令有点麻烦:

location / {
    autoindex                       off;
    try_files                       $uri $uri/ $uri/$request =404;
    index                           /;
    }

任何人都知道为什么Sinatra不会捕获路由而只提供文件吗?干杯。

1 个答案:

答案 0 :(得分:0)

让我们分解一下:

autoindex off;

您无需指定此选项,默认情况下它处于关闭状态。

try_files $uri $uri/ $uri/$request =404;

尝试并按此顺序将请求与文件匹配,以匹配的第一个为准。如果不匹配,则返回404。您的请求是http://mydomain.local/second,因此您要告诉Nginx寻找:

  1. webroot / second
  2. webroot / second /
  3. webroot / second / GET / second HTTP / 1.1
  4. 返回404

index指令告诉Nginx如何处理以斜杠结尾的请求,通常您可以指定项目中可能是索引文件的文件,例如index.php,index.html等。您实际上并没有使用此文件,并且{ {1}},因为它们具有相似的目的。

同样值得注意的是,Nginx在没有请求且不以文件扩展名结尾的任何请求中添加尾部斜杠,因此try_files可能需要更改为{{ 1}},因为我怀疑Sinatra会看到没有附加斜杠的请求