redirect - mod_rewrite - Cómo redirigir una url en NGINX
redireccionar http a https nginx (3)
Necesito redireccionar cada solicitud de http://test.com a http://www.test.com . ¿Cómo puede hacerse esto?
En el bloque del servidor traté de 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 ve como
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;
}
}
La mejor forma de hacer lo que desea 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 servidor principal bloque server_name variable de la siguiente manera:
server_name www.test.com;
Importante : El nuevo bloque de server
es la forma correcta de hacerlo, if
es malo . Debe usar ubicaciones y servidores en lugar de if
es posible. Rewrite
es a veces malo también , así que lo reemplazó con return
.
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 mencionado anteriormente está hecho o si ya lo 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;
}
para que su bloque de servidor se vea 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;
}
}
Similar a otra respuesta aquí, pero cambie el http en el esquema de reescritura a $ como ese:
server {
listen 80;
server_name test.com;
rewrite ^ $scheme://www.test.com$request_uri? permanent;
}
Y edite su servidor principal bloque server_name variable de la siguiente manera:
server_name www.test.com;
Tuve que hacer esto para redirigir www.test.com a test.com.