Você pode tentar usar o location
aninhado como este
location ~ ^/\~([^/]+)/(.*)$ {
location ~ ^/\~meow/(.*)$ {
rewrite ^(.*)$ http://meow.example.com$1 permanent;
}
[...]
}
Estou tentando redirecionar uma subpasta para um subdomínio no nginx. Desejo que o link seja redirecionado para o link . Eu tentei o seguinte:
location ~ ^/\~meow/(.*)$ {
rewrite ^(.*)$ http://meow.example.com$1 permanent;
}
Mas isso não funciona. Ele é pego pelo meu bloco de localização para diretórios de usuários:
location ~ ^/~([^/]+)/(.+\.php)$ {
[...]
}
and
location ~ ^/\~([^/]+)/(.*)$ {
[...]
}
Então, como eu faria isso? Ah, e eu só quero / ~ meow / ser redirecionado. Todos os outros diretórios de usuários não devem ser alterados.
Um local estático seria mais eficiente para o que você está pedindo. Se você ler as quatro regras no link , verá que um locaion ^ ~ não será substituído por um local regex . Você também parece querer despir o líder / meow enquanto redireciona. A abordagem correta seria:
location ^~ /~meow/ {
rewrite ^/~meow(.*) http://meow.example.com$1 permanent;
}
Como um aparte, não há razão para capturar o uri inteiro ao reescrever. O uri atual já está salvo em $ uri.
rewrite ^(.*)$ http://meow.example.com$1 permanent;
e
rewrite ^ http://meow.example.com$uri permanent;
irá sempre produzir o mesmo resultado, e a segunda reescrita é mais eficiente, já que é uma partida em curto circuito e já contém o que você está tentando capturar de qualquer maneira.
As localizações de Regexp são verificadas na ordem em que aparecem no arquivo de configuração e a primeira correspondência positiva é usada. O que significa que seu location ~ ^/\~meow/(.*)$
deve estar acima de outros dois locais no arquivo de configuração.