我有一个用ReactJS编写的SPA应用程序。该应用程序具有显示列表卡的索引视图(/myapp
)。按下卡,将通过路线(/myapp/item
,/myapp/itemXX
)重定向到新页面。当用户从索引访问时,应用程序运行良好。但是,刷新/item
中的浏览器会导致404 Not Found错误。
该服务器为NGINX,配置如下:
# ...
location /myapp {
root /usr/share/nginx/html/;
try_files $uri $uri/ /index.html;
index index.html;
}
# ...
在日志文件中,我看到:
{
"log": "2019/12/26 08:32:36 [error] 178#178: *3146 open() \"/etc/nginx/html/index.html\" failed (2: No such file or directory), client: 46.222.205.233, server: app.mydomain.com, request: \"GET /myapp/item/8?param=888 HTTP/2.0\", host: \"app.mydomain.com\"\n",
"stream": "stderr",
"time": "2019-12-26T08:32:36.253097755Z"
}
我已经尝试了多个位置规则,但没有成功(location ^~ /myapp
,为内部路由location /myapp/item
创建了特定规则。]
有帮助吗?谢谢!
我发现了这个问题,它总结了路由在服务器端和客户端都是如何工作的:
React-router urls don't work when refreshing or writing manually
对我有用的解决方案是:
location /myapp {
if (!-e $request_filename){
rewrite ^(.*)$ /myapp/index.html break;
}
}