nginx: redireciona subpasta para subdomínio

4

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.

    
por mrm8 15.05.2011 / 11:50

3 respostas

3

Você pode tentar usar o location aninhado como este

location ~ ^/\~([^/]+)/(.*)$ {
  location ~ ^/\~meow/(.*)$ {
    rewrite ^(.*)$ http://meow.example.com$1 permanent;     
  }
  [...]
}
    
por 15.05.2011 / 13:06
4

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.

    
por 16.05.2011 / 02:04
1

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.

    
por 15.05.2011 / 20:18