关于 React Router 的 Nginx 多个位置问题

关于 React Router 的 Nginx 多个位置问题

我正在尝试为我的 React 前端设置一个 nginx。其中有一些路由由使用浏览器历史记录的 React-router 处理。

这些位置基本上是:domain.com/cm domain.com/cm/dashboard domain.com/cm/management 等等。

当前配置如下:

root         /srv/build;

location /cm {
    alias /srv/build/cm;
    index index.html
    try_files $uri $uri/ /index.html;
}

它与 /cm 匹配,没有其他内容。

我试过这个,但location ^~ /cm {}没有成功,但应该是成功的,因为文档中说匹配以 /cm 开头的所有内容

解决方案虽然有效,但是很丑陋并且不模块化,如下所示:

location /cm {}
location /cm/dashboard {}
location /cm/management {}

块内的相同配置有效。但在这种情况下,每次添加新路由时,我们都应该修改 nginx。

我该如何仅用一个位置来解决这个问题?

更新

我发现主要问题是,当我使用位置 /cm {别名 /srv/build/cm} 时,它会尝试执行以下操作:/srv/build/cm/management,而我想要访问 domain.com/cm/management。我真正需要的是,以 /cm 开头的每个路由都应该是 /srv/build/cm 的别名,而不是 /srv/build/cm/management 等的别名。

因此,如果我输入 domain.com/cm/management,我也必须在这里使用别名 /srv/build/cm。

答案1

您是否尝试过仅定义 / 而不是 /cm:

location / {

以供参考:https://stackoverflow.com/questions/35320674/how-can-i-have-same-rule-for-two-locations-in-nginx-config

更新在多个网站条件下:
如果/代表另一个网站,则:

location ~ ^/(cm|dashboard|management)/ {
   root       /srv/build; 
}

相关内容