太多的重定向 - 更改裸露的网址 - > www.example.com

时间:2015-10-04 16:32:32

标签: nginx

我已更改了我的配置文件,以便当用户在没有www的情况下键入域时,会使用www重定向到域:

server_name example.com;
return 301 $scheme://www.example.com$request_uri;

我也希望我的https用于/ user

下的任何内容

我得到错误也可能重定向,我哪里错了?

所以我有:

server {
    listen 80 default_server;
    listen [::]:80 default_server ipv6only=on;

    root /var/www/example.com/site;
    index index.html index.htm;

    # Make site accessible from http://localhost/
    server_name example.com;
    return 301 $scheme://www.example.com$request_uri;

    location / {
            # First attempt to serve request as file, then
            # as directory, then fall back to displaying a 404.
            try_files $uri $uri/ =404;
            # Uncomment to enable naxsi on this location
            # include /etc/nginx/naxsi.rules
    }
    location /user {
            rewrite ^ https://$http_host$request_uri? permanent;
    }

}

对于端口443:

server {
    listen 443;
    server_name example.com;
    return 301 $scheme://www.example.com$request_uri;

    root /var/www/example.com/site;
    index index.html index.htm;

    ssl on;
    ssl_certificate //path here
    ssl_certificate_key //path here

    location / {
            rewrite ^ http://$http_host$request_uri? permanent;
    }
    location /user {
    }

}

1 个答案:

答案 0 :(得分:0)

listen 80 default_server;

你告诉nginx这个服务器块是所有http请求的默认服务器,无论服务器名称如何。

指令

return 301 $scheme://www.example.com$request_uri;

将nginx设置为将此服务器块的所有传入流量重定向到www.example.com。重定向的流量再次点击相同的服务器块(默认服务器),并且该过程重复,因此重定向循环。

要修复此更改您的配置文件并添加第二个服务器块:

server {
    listen 80;
    listen [::]:80 ipv6only=on;

    server_name www.example.com;

    #rest of your config 
    [...]

    }

server {
    server_name example.com;
    return 301 $scheme://www.example.com$request_uri;
   }

如果您想知道,可以省略端口80,因为它是默认设置。

同样的原则适用于443的流量(在重定向模块中,您必须提供端口和ssl特定配置)。