非www到www域?

我已经更改了我的conf文件,以便当用户在没有www的域中键入域名时,它将使用wwwredirect到域:

server_name example.com; 返回301 $ scheme://www.example.com$request_uri; 我也希望我的https在/ user下的任何东西

我得到的错误也可能redirect,我哪里错了?

所以我有:

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

最好的办法是为example.comwww.example.com分开设置server块。 example.com的条目应该只有

 server { listen 80; server_name example.com; return 301 http://www.example.com$request_uri; } 

www.example.com的条目将包含所有其他内容(显然具有redirect)。

同样,您将有两个单独的https服务器条目(端口443)。

我会做这样的事情:(未经testing)

 server { listen 80; server_name example.com; return 301 http://www.example.com$request_uri; } server { listen 80; server_name www.example.com; root /var/www/example.com/site; index index.html index.htm; location / { rewrite ^/index.php; } } server { listen 443; server_name www.example.com; root /var/www/example.com/site; index index.html index.htm; ssl on; ssl_certificate //path here ssl_certificate_key //path here location /user { rewrite ^ https://$http_host$request_uri? permanent; } }