问题

问题

服务器上有 2 个单页应用程序(App-OneApp-Two)。

要访问,App-One需要访问域www.app-one.comApp-Two可以在同一个域中的子文件夹中访问:www.app-one.com/app-two

两个应用程序都位于/var/www/服务器上的文件夹中:

  • 文件/var/www/www.app-one.comApp-One
  • 文件/var/www/app-twoApp-Two

问题

如果我www.app-one.com/app-two在浏览器中输入,它会重定向到www.app-one.com

如果我输入,www.app-one.com/app-two/index.html一切都会正常。

nginx 配置

server {
    listen 80 default_server;
    listen [::]:80 default_server;

    server_name www.app-one.com app-one.com;

    # www rewrite
    if ($host !~* ^www\.) {
        rewrite ^(.*)$ http://www.app-one.com permanent;
    }

    # Logs
    access_log /var/log/nginx/www.app-one.com_access.log;
    error_log /var/log/nginx/www.app-one.com_error.log;

    # App-One
    index index.html;
    root /var/www/www.app-one.com;

    # App-One
    location / {
        try_files $uri $uri/ /index.html =404;
    }

    # App-Two
    location /app-two {
        alias /var/www/app-two;
        try_files $uri $uri/ /index.html =404;
    }
}

我尝试过

很多位置过滤器(=、、~...)和在 app-two 位置中使用root而不是alias。但如果我这样做,资产的相对链接App-Two将指向错误的 URL。

这个配置有什么问题?

答案1

您的try_files陈述不正确。try_files语句应以默认 URI 或错误代码结尾,而不是两者兼而有之。请参阅这个文件了解更多信息。

如果是app-one该语句应如下所示:

try_files $uri $uri/ /index.html;

如果是应用程序二,默认操作需要是完整的 URI,而不仅仅是文件名:

try_files $uri $uri/ /app-two/index.html;

相关内容