utiliza una servidor redirectmatch redirecciones redireccionar redireccionamiento redireccion pagina otro hacer dominio como url redirect nginx

url - una - redirectmatch 301



Nginx causa la redirección 301 si no hay una barra inclinada (4)

Intenta cambiar

server_name localhost; # server_name_in_redirect off;

a

server_name localhost:8080; server_name_in_redirect on;

Estoy ejecutando nginx en una máquina virtual usando NAT y tengo problemas de redirección cuando accedo desde la máquina host.

Funciona como se esperaba

  • http://localhost:8080/test/index.htm : funciona.
  • http://localhost:8080/test/ : funciona.

No funciona como se esperaba

  • http://localhost:8080/test : redirige a http://localhost/test/ . Esto no es lo que quiero

Lo que he intentado

Basado en lo que he buscado en Google, intenté server_name_in_redirect off; y rewrite ^([^.]*[^/])$ $1/ permanent; , ambos sin éxito.

Mi default.conf:

server { listen 80; server_name localhost; # server_name_in_redirect off; location / { root /usr/share/nginx/html; index index.html index.htm index.php; } location ~ /.php$ { # rewrite ^([^.]*[^/])$ $1/ permanent; root /usr/share/nginx/html; try_files $uri =404; #fastcgi_pass 127.0.0.1:9000; fastcgi_pass unix:/tmp/php5-fpm.sock; fastcgi_index index.php; include fastcgi_params; } error_page 500 502 503 504 /50x.html; location = /50x.html { root /usr/share/nginx/html; } }


Una solución algo más simple, que funcionó para mí, es desactivar las redirecciones absolute_redirect off; con absolute_redirect off; como en el siguiente ejemplo:

server { listen 80; server_name localhost; absolute_redirect off; location /foo/ { proxy_pass http://bar/; }

Si ejecuto curl on en http://localhost:8080/foo , puedo ver que el encabezado Location en la respuesta HTTP redirigida se da como /foo/ y no http://localhost/foo/ .

$ curl -I http://localhost:8080/foo HTTP/1.1 301 Moved Permanently Server: nginx/1.13.8 Date: Tue, 03 Apr 2018 20:13:28 GMT Content-Type: text/html Content-Length: 185 Connection: keep-alive Location: /foo/

A partir de eso, supongo que cualquier navegador web haría lo correcto con la ubicación relativa. Probado en Chrome y funciona bien.


tratar :

server { listen 80; server_name localhost; location / { root /usr/share/nginx/html; index index.html index.htm index.php; if (-d $request_filename) { rewrite [^/]$ $scheme://$http_host$uri/ permanent; } } }


serverfault una posible solución a este problema en serverfault ; reproducido aquí por conveniencia:

Si entiendo la pregunta correctamente, quiere que se publique automáticamente, sin usar un redireccionamiento 301, http://example.com/foo/index.html cuando la solicitud es para http://example.com/foo sin barra posterior ?

Solución básica que funciona para mí

Si es así, he encontrado que esta configuración try_files funciona:

try_files $uri $uri/index.html $uri/ =404;

  • El primer $uri coincide exactamente con el uri
  • El segundo $uri/index.html coincide con un directorio que contiene el index.html donde el último elemento de la ruta coincide con el nombre del directorio, sin barra inclinada
  • El tercer $uri/ coincide con el directorio
  • El cuarto =404 devuelve la página de error 404 si ninguno de los patrones anteriores coincide.

Mi versión actualizada

Si agrega en el bloque de server :

index index.html index.htm;

Y modifique try_files para que se vea así:

try_files $uri $uri/ =404;

Debería funcionar también.