meu código conf:
index index.html index.php;
location / {
if ($uri = '/a/') {
return 301 https://example.com/a;
}
try_files $uri $uri/ =404;
}
Se url for /a/
, 301 para /a
, então try_files
parte, adicione /
ao /a
final, torne-se /a/
.
Próximo passo, acho que ele tentará a index
definição, se tornará /a/index.html
e chegará ao arquivo.
Mas, na verdade, ele tentou /a/
e saltou para fora location
, depois entrou location
novamente, para if ($uri = '/a/') { ... }
.
Então um loop infinito.
Ora, fiquei confuso.
O que eu quero fazer é
- Se request
example.com/a/
, pule paraexample.com/a
, depois para 2 - Se request
example.com/a
, mostreexample.com/a/index.html
(mas o URL éexample.com/a
).
Alguém pode me ajudar a chegar a isso?
Responder1
Está fazendo exatamente o que deveria fazer.
Você nunca pode alcançá-lo /a/index.html
porque continua redirecionando de volta para /a
antes que isso aconteça. Quando o nginx processa isso, ele vê o diretório no sistema de arquivos e redireciona automaticamente (corretamente) para /a/
.
Você deve remover este redirecionamento inadequado.
Responder2
Bem-vindo ao ServerFault. Você pode fazer o que é mencionado no OP com o seguinte código...
location / {
if ($uri = '/a/') {
return 301 https://example.com/a;
}
try_files $uri $uri/index.html =404;
}
Por favor, veja a pergunta relevante e a resposta aceita emRemovendo a barra final de um URL com nginx.
Basicamente, não precisamos depender index
e sim servir index.html
diretamente quando example.com/a
solicitado.