使用别名时的重定向循环

使用别名时的重定向循环

我正在尝试设置家庭网络服务器。

我的文件夹结构如下:

/home/pi/www/
├── homeGUI
│   ├── backend /* Contains an express server listening on 8080 */
│   ├── frontend /* Contains an Angular application */
│   │   ├── index.html
│   │   └── /* Other .js files */
│   └── scripts
└── index.html

而我的网站配置是这样的:

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

    root /home/pi/www;

    index index.html index.htm;

    server_name _;

    #intended to serve the angular application
    location /homeGUI/ {
        alias /home/pi/www/homeGUI/frontend/;
        try_files $uri $uri/ /homeGUI/frontend/index.html; #this one is causing problems
    }

    #intended to serve the files in the www folder
    location / {
        try_files $uri $uri/ index.html;
    }

    #intended to serve the express server
    location /homeGUI/api/ {
        proxy_pass  http://127.0.0.1:8080
    }
}

上述配置可以为所有 3 个内容(静态 index.html、angular 应用程序和 express 服务器)提供服务。

我遇到的问题是,当我直接导航到 Angular 应用程序的路由(或通过在该路由上刷新页面)(es:)时,localhost/homeGUI/route1这会导致重定向循环,因为它尝试重定向到 /homeGUI/frontend/index.html,然后落入相同的位置规则和循环。

我想要完成的就是将每个请求重定向/homeGUI/*/home/pi/www/homeGUI/frontend/index.html文件,但文件请求除外,/homeGUI/api该文件请求应该转到端口 8080 上的快速服务器。

任何帮助都值得感激。谢谢。

答案1

您的语句的最后一个元素try_files应该是 URI。

该文件的URI/home/pi/www/homeGUI/frontend/index.html/homeGUI/index.html不是 /homeGUI/frontend/index.html

这个文件了解详情。

例如:

location /homeGUI/ {
    alias /home/pi/www/homeGUI/frontend/;
    try_files $uri $uri/ /homeGUI/index.html;
}

上述方法可能有效,但在同一个块中使用aliastry_files可能会导致问题,因为这个问题

您可以try_files用默认行为和if块替换您的语句。

例如:

location /homeGUI/ {
    alias /home/pi/www/homeGUI/frontend/;
    if (!-e $request_filename) { rewrite ^ /homeGUI/index.html last; }
}

这种警告关于 的使用if

相关内容