AngularJS + Nginx 因此 404 返回 404,直接子路由访问返回 AngularJS 索引文件



我一直在尝试为此找到解决方案,但到目前为止没有运气。所以在这里我问的是关于Stackoverflow的问题,希望得到一些问题的答案。

我有一个AngularJS应用程序和一个Angular应用程序。它们都需要从一个Docker使用一个Nginx配置提供服务。这就是我到目前为止在 Nginx 配置方面所拥有的

server {
listen 0.0.0.0:80;
root /usr/share/nginx/html;
location ^~ /legacy/ {
add_header Cache-Control no-cache;
try_files $uri $uri/ /index.html =404;
}
location / {
add_header Cache-Control no-cache;
try_files $uri $uri/ /index.html =404;
}
}

这条/legacy路线是所有AngularJS东西所在的地方。所以通常当用户访问我的网站时,他们应该被带到Angular应用程序。但是,如果他们明确转到/legacyURL,他们将获得AngularJS应用程序。听起来很简单,但是由于我对Nginx缺乏了解,我无法实现这一目标。

现在,/legacy将我带到正确的index.html文件,但该文件正在尝试加载不存在的资产(顺便说一句,我无法编辑任何旧代码,因此删除此资产是毫无疑问的(,在这种情况下,而不是返回 404 Nginx 返回index.html本身。这是有道理的,因为try_files指令。所以我尝试删除try_files指令,只是依靠autoindex on当用户只访问 url 时/legacy它工作正常。当用户直接尝试访问旧版的子路由(如/legacy/home(时,它停止工作。

所以我的问题是,我需要在 Nginx 配置端进行哪些更改,以便丢失的资产只会抛出 404,并且当用户直接尝试访问任何遗留子路由(即/legacy/home(时,它将从遗留目录返回index.html

我能够通过在/legacy位置块顶部添加新的位置路由来实现这一点,正如@Richard在评论中的建议。我还根据自己的需要进行了更多更改。这是我目前正在使用的最终配置。

server {
keepalive_timeout 300s;
listen 0.0.0.0:80;
root /usr/share/nginx/html;
port_in_redirect off;
location ~* .(jpg|jpeg|gif|css|png|js|ico|json|xml|txt) {
}
location ~ ^/legacy(?:/(.*))?$ {
add_header Cache-Control no-cache;
try_files $uri $uri/ /index.html =404;
}
location / {
add_header Cache-Control no-cache;
try_files $uri $uri/ $uri.html /index.html =404;
}
}

最新更新