Nginx agrega una barra diagonal sin reescribir

Nginx agrega una barra diagonal sin reescribir

Estoy intentando crear una redirección para agregar una barra diagonal,

location / {
  if($request_uri ~ ^([^.]*[^/])$){
    return 301 https://$host$request_uri/;
  }
}

No tengo idea de cómo hacer coincidencias si, cuando simplemente creo una redirección con /, funciona, solo que esta expresión regular parece rota.

ACTUALIZAR

Reescribir lo intenté

location / {
  rewrite ^([^.]*[^/])$ $1/ permanent;
  .....
}

y

if ($http_x_forwarded_proto != "https") {
  return 301 https://$host$request_uri;
}

funciona bien, redirige a https, también quería crear expresiones regulares con él

Respuesta1

Se resolvió hace mucho tiempo, pero veo que muchas personas revisan esta pregunta, así que si no recuerdo mal, no tenía esta línea de código y me estaba redirigiendo:

port_in_redirect off;

Lo sé, no mencioné los puertos en cuestión, no hay forma de responderlo, pero lo dejaré aquí si alguien tuvo el mismo problema.

Respuesta2

Si entiendo la pregunta correctamente, desea publicarla automáticamente, sin utilizar una redirección 301.http://ejemplo.com/foo/index.htmlcuando la solicitud es parahttp://ejemplo.com/foosin barra diagonal?

Si es así, encontré que esta configuración de try_files funciona:

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

Respuesta3

Esto parece funcionar como se esperaba:

location / {
    if ($request_uri ~ ^([^.]*[^/])$) {
        return 301 https://$host$request_uri/;
    }
    try_files $uri $uri/ /index.html;
    ....
}

No estoy seguro de ver la diferencia con el que ha probado, excepto el error de sintaxis que debería haber encontrado debido a que faltan espacios en la ifdeclaración (podría ser un error tipográfico). ...o tal vez porque tiene otras directivas que no nos muestra que anulan esta.

información relacionada