服务器上有 2 个单页应用程序(App-One
和App-Two
)。
要访问,App-One
需要访问域www.app-one.com
。App-Two
可以在同一个域中的子文件夹中访问:www.app-one.com/app-two
。
两个应用程序都位于/var/www/
服务器上的文件夹中:
- 文件
/var/www/www.app-one.com
夹App-One
- 文件
/var/www/app-two
夹App-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;