Nginx no-www to www and www to no-www

前端 未结 17 2356
予麋鹿
予麋鹿 2020-11-22 09:53

I am using nginx on Rackspace cloud following a tutorial and having searched the net and so far can\'t get this sorted.

I want www.mysite.com to go to mysite.com as

17条回答
  •  野趣味
    野趣味 (楼主)
    2020-11-22 10:14

    HTTP Solution

    From the documentation, "the right way is to define a separate server for example.org":

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

    HTTPS Solution

    For those who want a solution including https://...

    server {
            listen 80;
            server_name www.domain.com;
            # $scheme will get the http protocol
            # and 301 is best practice for tablet, phone, desktop and seo
            return 301 $scheme://domain.com$request_uri;
    }
    
    server {
            listen 80;
            server_name domain.com;
            # here goes the rest of your config file
            # example 
            location / {
    
                rewrite ^/cp/login?$ /cp/login.php last;
                # etc etc...
    
            }
    }
    

    Note: I have not originally included https:// in my solution since we use loadbalancers and our https:// server is a high-traffic SSL payment server: we do not mix https:// and http://.


    To check the nginx version, use nginx -v.

    Strip www from url with nginx redirect

    server {
        server_name  www.domain.com;
        rewrite ^(.*) http://domain.com$1 permanent;
    }
    
    server {
        server_name  domain.com;
        #The rest of your configuration goes here#
    }
    

    So you need to have TWO server codes.

    Add the www to the url with nginx redirect

    If what you need is the opposite, to redirect from domain.com to www.domain.com, you can use this:

    server {
        server_name  domain.com;
        rewrite ^(.*) http://www.domain.com$1 permanent;
    }
    
    server {
        server_name  www.domain.com;
        #The rest of your configuration goes here#
    }
    

    As you can imagine, this is just the opposite and works the same way the first example. This way, you don't get SEO marks down, as it is complete perm redirect and move. The no WWW is forced and the directory shown!

    Some of my code shown below for a better view:

    server {
        server_name  www.google.com;
        rewrite ^(.*) http://google.com$1 permanent;
    }
    server {
           listen 80;
           server_name google.com;
           index index.php index.html;
           ####
           # now pull the site from one directory #
           root /var/www/www.google.com/web;
           # done #
           location = /favicon.ico {
                    log_not_found off;
                    access_log off;
           }
    }
    

提交回复
热议问题