nginx redirige /2013/04/test.html a /test - no funciona

nginx redirige /2013/04/test.html a /test - no funciona

Me he estado volviendo loco por esto. ¿Cómo puedo redirigir una determinada URL /2013/04/test.htmlen /testnginx?

He probado esto: pero no funciona:

server {
     location /2013/05/test.html {
         return 301 http://$server_name/test;
     }
}

He realizado algunas pruebas; por alguna razón, cualquier URL sin extensión .html en la parte de ubicación de la línea de configuración se redirigirá correctamente, pero tan pronto como coloco .html en la ubicación, kaboom, deja de funcionar.

¿Alguna idea de por qué es esto? ¡Gracias!

Respuesta1

En lugar de tener un bloque de ubicación para cada redireccionamiento, siempre puedes simplemente agregar reglas de reescritura en un bloque de ubicación existente:

rewrite /2013/05/test.html http://$server_name/test permanent;
rewrite /2013/05/test2.html http://$server_name/test2 permanent;

También puede crear varias expresiones regulares para evitar tener que agregar una nueva cada vez que se agrega un nuevo 'enlace permanente'.

Respuesta2

Estoy de acuerdo con Jason Ilicic, usando unreescribir la reglaProbablemente sería más eficiente.

Si realmente quieres usar elbloque de ubicación¿Has probado a utilizar el modificador "="? Si tiene varias ubicaciones, la lógica de selección de Nginx podría ser seleccionar una diferente de la esperada.

De la documentación de Nginx

using the “=” modifier it is possible to define an exact match of URI and location

así por ejemplo

server {
    location = /2013/05/test.html {
        return 301 http://$server_name/test;
    }
}

información relacionada