当文件不存在时,Nginx 会重写所有内容,除非在目录中

当文件不存在时,Nginx 会重写所有内容,除非在目录中

我的 nginx 中有以下部分代码:

server {    
listen 443 ssl http2 default_server;
listen [::]:443 ssl http2 default_server;
include snippets/ssl-renmind.net.conf;
include snippets/ssl-params.conf;

...



    rewrite ^/manage/GO/(.+)$ /gatherOpinionAdmin/$1 last;
    rewrite ^/manage/CT/(.+)$ /couponTracksAdmin/$1 last;
    rewrite ^/manage/CH/(.+)$ /contestHeroAdmin/$1 last;
    rewrite ^/manage/DC/(.+)$ /distributeContentAdmin/$1 last;
    rewrite ^/manage/PD/(.+)$ /productsAdmin/$1 last;
    rewrite ^/manage/PP/(.+)$ /pitchPageAdmin/$1 last;

    rewrite ^/([^/]+)/GO/(.+)$ /gatherOpinionUser/$2?currentFolder=$1 last;
    rewrite ^/([^/]+)/CH/(.+)$ /contestHeroUser/$2?currentFolder=$1 last;
    rewrite ^/([^/]+)/CT/(.+)$ /couponTracksUser/$2?currentFolder=$1 last;
    rewrite ^/([^/]+)/DC/(.+)$ /distributeContentUser/$2?currentFolder=$1 last;
    rewrite ^/([^/]+)/PD/(.+)$ /productsUser/$2?currentFolder=$1 last;


    if (!-e $request_filename){
        #rewrite ^/([^/]+)(.*+)$ /genUser/$2?currentFolder=$1 last;
}
}

我正在尝试添加这个:

    location /webmin/ {
            proxy_pass https://localhost:10000/;
        proxy_redirect https://$host:10000/ /webmin/;
            proxy_set_header Host $host;
        }

仅当我删除上面重写所有不存在文件(当前已注释掉)的最后一个重写时,该方法才有效。如果其位置为 /webmin/,我该如何跳过所有重写来实现。/webmin/ 实际上不存在文件。

答案1

您应该使用以下设置:

location / {
    if (!-e $request_filename) {
        rewrite ^/([^/]+)(.*+)$ /genUser/$2?currentFolder=$1 last;
    }
}

location /webmin {
    proxy_pass https://localhost:10000/;
    proxy_redirect https://$host:10000/ /webmin/;
    proxy_set_header Host $host;
}

这里重要的部分是添加location /块,以便 nginx 能够location正确使用查找。

也可以删除以下if声明,总是首选

答案2

好吧,每次最终寻求帮助我都能解决问题。

将其放入:if ($request_uri ~ (/webmin)){ break; }

解决了这个问题。

相关内容