Ok, depois de algumas experiências, encontrei algumas soluções diferentes.
Para recapitular, quero que /A
permaneça como /A
no navegador do usuário (não há redirecionamento para /B
), mas ainda quero que ele exiba o conteúdo de /B
.
Opção 1: Use um symlink (: Isso funciona, mas você precisa acessar o sistema de arquivos. Evita o problema.
Opção 2: Impedir o redirecionamento automático de barra invertida 301 usando um bloco de localização de correspondência exata ( =
):
location = /A {
rewrite "" /B/;
}
# Note: the below should probably be inside a location block.
rewrite ^/A(.+)$ /B$1 last;
Descobri isso dos documentos do Nginx :
without the trailing slash, a permanent redirect with the code 301 will be returned to the requested URI with the slash appended. If this is not desired, an exact match of the URI and location could be defined
Opção 3: Use um redirecionamento de /A
para /A/
, mas faça isso manualmente, para que ele não seja retornado ao cliente como um redirecionamento (reescrito) para /B/
:
location = /A {
return 301 /A/;
}
location /A/ {
rewrite ^/A/(.*)$ /B/$1 last;
}
Acabei indo com a opção 3, pois faz com que /A
se comporte como /B
, incluindo o redirecionamento à direita da barra (mas no lugar certo, agora).