web-dev-qa-db-fra.com

Comment rediriger une URL dans NGINX

J'ai besoin de rediriger chaque http://test.com demande à http://www.test.com . Comment cela peut-il être fait.

Dans le bloc serveur, j'ai essayé d'ajouter

 rewrite ^/(.*) http://www.test.com/$1 permanent;

mais dans le navigateur, il est dit

  The page isn't redirecting properly

  Firefox has detected that the server is redirecting the request for 
  this address in a way that will never complete.

mon bloc serveur ressemble à

 server {
            listen       80;
            server_name  test.com;
            client_max_body_size   10M;
            client_body_buffer_size   128k;

            root       /home/test/test/public;
            passenger_enabled on;
            Rails_env production;

            #rewrite ^/(.*) http://www.test.com/$1 permanent;
            #rewrite ^(.*)$ $scheme://www.test.com$1;

            error_page   500 502 503 504  /50x.html;
            location = /50x.html {
                    root   html;
            }
    }
133
Amal Kumar S

La meilleure façon de faire ce que vous voulez est d’ajouter un autre bloc serveur:

server {
        #implemented by default, change if you need different ip or port
        #listen *:80 | *:8000;
        server_name test.com;
        return 301 $scheme://www.test.com$request_uri;
}

Et éditez la variable nom_serveur du bloc de votre serveur principal comme suit:

server_name  www.test.com;

Important : Le nouveau bloc server est la bonne façon de le faire, if est mauvais . Vous devez utiliser des emplacements et des serveurs au lieu de if si cela est possible. Rewrite est parfois mal aussi , donc remplacé par return.

267
Dmitry Verhoturov

Semblable à une autre réponse ici, mais changez le http dans la réécriture en $ scheme comme suit:

server {
        listen 80;
        server_name test.com;
        rewrite     ^ $scheme://www.test.com$request_uri? permanent;
}

Et éditez la variable nom_serveur du bloc de votre serveur principal comme suit:

server_name  www.test.com;

Je devais le faire pour rediriger www.test.com vers test.com.

16

Vérifiez d’abord que vous avez installé Nginx avec le module de réécriture HTTP. Pour installer ceci nous avons besoin de pcre-library

Comment installer la bibliothèque pcre

Si les actions mentionnées ci-dessus sont terminées ou si vous les avez déjà, ajoutez simplement le code ci-dessous dans votre bloc de serveur nginx.

  if ($Host !~* ^www\.) {
    rewrite ^(.*)$ http://www.$Host$1 permanent;
  }

Pour supprimer www de chaque requête, vous pouvez utiliser

  if ($Host = 'www.your_domain.com' ) {
   rewrite  ^/(.*)$  http://your_domain.com/$1  permanent;
  }

donc votre bloc serveur ressemblera à

  server {
            listen       80;
            server_name  test.com;
            if ($Host !~* ^www\.) {
                    rewrite ^(.*)$ http://www.$Host$1 permanent;
            }
            client_max_body_size   10M;
            client_body_buffer_size   128k;

            root       /home/test/test/public;
            passenger_enabled on;
            Rails_env production;

            error_page   500 502 503 504  /50x.html;
            location = /50x.html {
                    root   html;
            }
    }
9
Amal Kumar S