我已经更改了我的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.com和www.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; } }