我正在尝试为我的 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 / {
更新在多个网站条件下:
如果/代表另一个网站,则:
location ~ ^/(cm|dashboard|management)/ {
root /srv/build;
}