nginx reescreve em arquivos específicos

2

Tenho um pequeno problema ao redirecionar dois arquivos do local A para o local B usando nginx. Esses arquivos estavam em uma pasta folderA e agora eu quero que eles sejam servidos a partir da pastaB. Infelizmente alguns usuários sabem o URL direto, então eu tenho que: a) redirecionar a pasta A para a pasta B e fazer o mesmo para os arquivos relevantes.

Estou usando o seguinte:

location /folderA {
    rewrite ^ http://www.example.com/folderB/ permanent;
}

e isso funciona bem para o redirecionamento da pasta. Para atender também aos arquivos, não consegui encontrar nada que me agrade, então criei um pequeno script php que irá receber uma variável q e então executar os redirecionamentos. ou seja:

location /folderA {
    try_files $uri $uri/ folderB/process.php?q=$uri&$args;
}

Infelizmente isso não funciona. Quando uma solicitação for para a pasta, o process.php é chamado. No entanto, quando uma solicitação é enviada diretamente para um arquivo (digamos, abc.pdf), ela não é exibida e é registrada no log de erros.

Eu estava com a impressão de que todas as solicitações acabariam sendo processadas pelo process.php, mas aparentemente estou errado.

Qualquer ponteiro seria mais do que apreciado.

Obrigado!

    
por Nikolaos Dimopoulos 13.04.2011 / 06:06

1 resposta

2

Você pode tentar isso:

location ~* ^/folderA/.*$ {
    rewrite ^/folderA/$ http://www.example.com/folderB/ permanent;
    try_files $uri $uri/ /folderB/process.php?q=$uri&$args;
}

Se isso não funcionar, o log de erros pode ser útil aqui. Lembre-se também que a linha try_files usa $uri que inclui o nome da pasta. Então, o try_files no caso de abc.pdf é /foderA/abc.pdf .

    
por 13.04.2011 / 07:32