Nginx配置导致过多的重定向

时间:2017-07-25 04:04:35

标签: nginx configuration directory-structure

我有一个以example.com为根的conf文件。在example.com目录中,有一个html,css,img和js文件夹。据我所知,这与传统的html目录不同。我尝试了很多不同的配置(使用基于文件类型,变量等的正则表达式),但我总是得到太多的重定向错误。任何人都可以为这种类型的目录结构提供良好的conf文件帮助吗?这是我目前的conf文件。

server {
    listen 80 default_server;
    listen [::]:80 default_server;
    # return 301 https://$server_name$request_uri;

    listen 443 ssl http2 default_server;
    listen [::]:443 ssl http2 default_server;
    include snippets/ssl-example.com.conf;
    include snippets/ssl-params.conf;

    server_name www.example.com example.com;

    root /var/www/www.example.com/;
    index index.php index.html;
    client_max_body_size 100m;

    error_page 404 = error.html?error=404;

    location ~ /.well-known {
            allow all;
    }

    location / {
            location ~* \.(html|php)$ {
                   root html/;
            }
            location ~* \.css$ {
                   root css/;
            }
            location ~* \.js$ {
                   root js/;
            }
            location ~* \.(png|jpeg|gif)$ {
                   root img/;
            }
            try_files $uri =404;
    }
}

提前感谢您的帮助!

1 个答案:

答案 0 :(得分:0)

以下是我最终使用的配置:

server {
    listen 80 default_server;
    listen [::]:80 default_server;
    # return 301 https://$server_name$request_uri;

    listen 443 ssl http2 default_server;
    listen [::]:443 ssl http2 default_server;
    include snippets/ssl-example.com.conf;
    include snippets/ssl-params.conf;

    server_name www.example.com example.com;

    root /var/www/www.example.com/;
    index index.php index.html;
    client_max_body_size 100m;

    error_page 404 = /html/error.html?error=404;

    location ~ /.well-known {
            allow all;
    }

    location = / {
            try_files /html/index.html =404;
    }

    location / {
            location ~* \.(html|php)$ {
                    try_files $uri /html/$uri =404;
            }
            location ~* \.css$ {
                    try_files $uri /css/$uri =404;
            }
            location ~* \.js$ {
                    try_files $uri /js/$uri =404;
            }
            location ~* \.(png|jpeg|gif)$ {
                    try_files $uri /img/$uri =404;
            }
            try_files $uri =404;
    }

}

我的问题是我的所有重定向都使用了相对路径(例如try_files html / $ uri)而不是从站点根目录(/ html / $ uri)的绝对路径。这导致重定向,如/ html / html / html / ...

我认为如果我使用绝对路径,那么它对于服务器的根来说是绝对的,而不是网站。

我现在唯一的问题是我的错误页面上的参数重定向(?error = 404)不适用于绝对路径,但这并不是一件大事。