Cómo redirigir una url en NGINX


Necesito redirigir cada http://test.com solicitar a http://www.test.com. Cómo se puede hacer esto.

En el bloque de servidor intenté agregar

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

Pero en el navegador dice

  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.

Mi bloque de servidor se parece a

 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;
            }
    }
Author: Digital site, 2012-04-24

3 answers

La mejor manera de hacer lo que quieres es agregar otro bloque de servidor:

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

Y edite su variable de bloque de servidor principal server_name de la siguiente manera:

server_name  www.test.com;

Importante: Nuevo server bloque es la manera correcta de hacer esto, if es malo . Debe usar ubicaciones y servidores en lugar de if si es posible. Rewrite es a veces mal también, por lo que lo reemplazó con return.

 255
Author: Dmitry Verhoturov,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-02-18 02:21:50

Similar a otra respuesta aquí, pero cambie el http en la reescritura a a scheme scheme de la siguiente manera:

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

Y edite su variable de bloque de servidor principal server_name de la siguiente manera:

server_name  www.test.com;

Tuve que hacer esto para redirigir www.test.com to test.com.

 16
Author: Damien Justin Šutevski,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2013-07-26 18:17:56

Primero asegúrese de haber instalado Nginx con el módulo de reescritura HTTP. Para instalar esto necesitamos tener pcre-library

Cómo instalar la biblioteca pcre

Si lo anterior se hace o si ya los tiene, simplemente agregue el siguiente código en su bloque de servidor nginx

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

Para eliminar www de cada solicitud puede usar

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

Por lo que su bloque de servidor se verá como

  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;
            }
    }
 7
Author: Amal Kumar S,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2012-04-24 10:20:33