Nginx位置/覆盖所有其他位置

Nginx位置/覆盖所有其他位置,nginx,nginx-location,Nginx,Nginx Location,我正在尝试编写一个简单的nginx配置。我需要的是: 如果根目录中存在文件,请为该文件提供服务 如果url为/default/url,则显示/some/path2/index.html 否则重定向到/default/url 我的配置如下 server { listen 127.0.0.1:80; server_name my.domain.com; root /some/path/html; location / { retur

我正在尝试编写一个简单的nginx配置。我需要的是:

  • 如果根目录中存在文件,请为该文件提供服务
  • 如果url为/default/url,则显示/some/path2/index.html
  • 否则重定向到/default/url
  • 我的配置如下

        server {
        listen 127.0.0.1:80;
        server_name my.domain.com;
    
        root /some/path/html;
    
        location / {
                return 302 /default/url; 
        }
    
        location = /default/url {
                rewrite ^/(.*)$/some/path2/index.html;
        }
    
        location /default/e_schema {
                proxy_pass http://other.host.com;
                proxy_http_version 1.1;
                proxy_set_header Host $http_host;
                proxy_set_header Upgrade $http_upgrade;
                proxy_set_header Connection $connection_upgrade;
        }
    }
    
    无论url如何,它都会立即重定向到/default/url。 我试图将位置/块放在底部和顶部。我尝试使用位置~/.降低优先级,但没有任何帮助。如果我删除了位置/,一切正常,我的要求2和3就可以了

    根据这个答案,它应该可以工作。

    您在位置块中放置了一个“=”

    location = /default/url {
    
    你能试着把这个拿走吗?我相信可能是设置了url,您在位置块中添加了“=”

    location = /default/url {
    
    你能试着把这个拿走吗?我相信可能是设置了url,问题就在这里

    location = /default/url {
            rewrite ^/(.*)$/some/path2/index.html;
    }
    
    这使得内部重定向到/path中的/some/path2/index.html,从而触发重定向到/default/url的location/块,以此类推

    我的解决方案是创建空块,将路径从位置/

    location /some/path2/index.html {}
    
    问题就在这里

    location = /default/url {
            rewrite ^/(.*)$/some/path2/index.html;
    }
    
    这使得内部重定向到/path中的/some/path2/index.html,从而触发重定向到/default/url的location/块,以此类推

    我的解决方案是创建空块,将路径从位置/

    location /some/path2/index.html {}
    

    否,删除后=结果相同。我添加它是因为我需要精确匹配,有像/default/url/style.css这样的文件,所以删除=将导致不保存这些文件。不,删除=后的结果是相同的。我添加它是因为我需要精确匹配,有像/default/url/style.css这样的文件,所以删除=将导致不保存这些文件。