![使用 try_files 时 JSON 请求出现问题](https://linux22.com/image/720015/%E4%BD%BF%E7%94%A8%20try_files%20%E6%97%B6%20JSON%20%E8%AF%B7%E6%B1%82%E5%87%BA%E7%8E%B0%E9%97%AE%E9%A2%98.png)
我正在尝试try_files
按照这里的建议使用https://router.vuejs.org/en/essentials/history-mode.html并达到同样的目的。
我对它做了一个更改,即删除index.html
部分命令,使其看起来如下所示:
location / {
try_files $uri $uri/ /;
}
如果我的问题的一部分是我删除了,index.html
我会注意到当我删除它时出现了以下错误:
rewrite or internal redirection cycle while internally redirecting to "/index.html"
据我所知,它按预期工作,只是它对 JSON 请求的处理方式与我想要的不同。我没有得到 JSON 响应,而是得到了看起来像我网站上的任何其他页面但没有内容的内容。
通过跟踪日志,我可以看到当我点击时/foo.json
我被重定向到/
并检查 URL,我可以看到已经/foo.json
被pushState
编辑了。
我在这里使用try_files
不正确吗?如果没有,有没有办法让它忽略 JSON 请求?我尝试将语句放在检查内容类型的条件中,但当我启动服务器时出现以下错误:
nginx: [emerg] "try_files" directive is not allowed here in
/tmp/passenger-standalone.15snfcb/config:110
答案1
在迈克尔·汉普顿的帮助下我想出了以下解决方案:
在我的服务器块中(删除了不必要的其他块/命令):
location / {
try_files $uri $uri/ /;
}
location ~ ".+json$" {
passenger_enabled on;
}
正则表达式不够全面,但可以解决我遇到的问题。我想找到一个使用文件内容类型而不是正则表达式的解决方案。