mi código de configuración:
index index.html index.php;
location / {
if ($uri = '/a/') {
return 301 https://example.com/a;
}
try_files $uri $uri/ =404;
}
Si la URL es /a/
301 a /a
, entonces try_files
parte, agrega /
al /a
final, conviértete en /a/
.
El siguiente paso, creo que probará la index
definición, se convertirá en /a/index.html
y alcanzará el archivo.
Pero en realidad, lo intentó /a/
y saltó location
, luego volvió a location
entrar if ($uri = '/a/') { ... }
.
Luego un bucle infinito.
Vaya, simplemente me confundí.
Lo que quiero hacer es
- Si lo solicita
example.com/a/
, salte a yexample.com/a
luego a 2 - Si lo solicita
example.com/a
, muéstreloexample.com/a/index.html
(pero la URL esexample.com/a
).
¿Alguien puede ayudarme a llegar a esto?
Respuesta1
Está haciendo exactamente lo que debe hacer.
Nunca podrás llegar /a/index.html
porque sigues redireccionando /a
antes de que esto pueda suceder. Cuando nginx procesa esto, ve el directorio en el sistema de archivos y lo redirige automáticamente (correctamente) a /a/
.
Deberías eliminar esta redirección inapropiada.
Respuesta2
Bienvenido a ServerFault. Puedes hacer lo que se menciona en el OP con el siguiente código...
location / {
if ($uri = '/a/') {
return 301 https://example.com/a;
}
try_files $uri $uri/index.html =404;
}
Consulte la pregunta relevante y la respuesta aceptada enEliminar la barra diagonal final de una URL con nginx.
Básicamente, no tenemos que depender de nosotros index
, sino que servimos index.html
directamente cuando example.com/a
se nos solicita.