nginx Sinatra头元刷新404

问题描述 投票:0回答:1

出于某种原因,页面转发到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

我想也许我在locationsnginx.conf指令有点棘手:

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

任何人都有任何见解为什么Sinatra不会捕获路线,只是提供文件?干杯。

nginx sinatra refresh nginx-location
1个回答
0
投票

让我们打破这个:

autoindex off;

您不需要指定它,默认情况下它是关闭的。

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

按此顺序尝试并匹配对文件的请求,提供匹配的第一个请求。如果没有匹配,请返回404.您的请求是http://mydomain.local/second,所以您告诉Nginx寻找:

  1. 根目录/第二
  2. 根目录/秒/
  3. webroot / second / GET / second HTTP / 1.1
  4. 返回404

index指令告诉Nginx如何处理以斜杠结尾的请求,你通常会在项目中指定可能是索引文件的文件,例如index.php,index.html等。你并没有真正使用它和try_files一起使用服务于类似的目的。

另外值得注意的是,Nginx为没有任何请求的任何请求添加了一个尾随斜杠,并且没有以文件扩展名结尾,所以也可能是get "/second" do需要更改为get "/second/" do的情况,因为我怀疑Sinatra曾经看到过没有附加尾部斜杠的请求

© www.soinside.com 2019 - 2024. All rights reserved.