2015-10-04 75 views
0

我已经改变了我的conf文件,以便在时域中的用户类型,而WWW重定向到域以www:重定向过多 - 改变裸体网址 - > www.example.com

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

我也希望我的HTTPS下的任何/用户

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

所以我必须:

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 { 
    } 

}

回答

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的特定配置)。