出于某种原因,页面转发到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
不会捕获路线,只是提供文件?干杯。
让我们打破这个:
autoindex off;
您不需要指定它,默认情况下它是关闭的。
try_files $uri $uri/ $uri/$request =404;
按此顺序尝试并匹配对文件的请求,提供匹配的第一个请求。如果没有匹配,请返回404.您的请求是http://mydomain.local/second
,所以您告诉Nginx寻找:
index指令告诉Nginx如何处理以斜杠结尾的请求,你通常会在项目中指定可能是索引文件的文件,例如index.php,index.html等。你并没有真正使用它和try_files
一起使用服务于类似的目的。
另外值得注意的是,Nginx为没有任何请求的任何请求添加了一个尾随斜杠,并且没有以文件扩展名结尾,所以也可能是get "/second" do
需要更改为get "/second/" do
的情况,因为我怀疑Sinatra曾经看到过没有附加尾部斜杠的请求