Olhando em volta, eu acho que usar um local de regexp com capturas é o mais fácil. Adaptando o seu exemplo, acabo com:
location ~ ^/cargo(.*) {
try_files $1 $1/ /cargo/index.php?_REWRITE_COMMAND=$1&args;
}
Eu tenho uma reescrita no meu arquivo conf ngix que funciona corretamente, exceto que parece incluir o bloco de localização como parte da variável $ uri. Eu só quero o caminho depois do bloco de localização. Meu código de configuração atual é:
location /cargo {
try_files $uri $uri/ /cargo/index.php?_REWRITE_COMMAND=$uri&args;
}
Usando um url de exemplo de http://localhost/cargo/testpage
, o redirecionamento funciona, no entanto, o valor do parâmetro "_REWRITE_COMMAND" recebido pelo meu arquivo php é "/ cargo / testpage". Eu preciso retirar o bloco de localização e só tenho "testpage" como o $ uri
Eu também sei que eu poderia tirar isso do código do aplicativo, mas a razão pela qual eu quero tentar consertá-lo no nginx conf é por razões de compatibilidade, pois ele também roda no Apache. Eu também devo dizer que descobri uma maneira realmente hacky de fazê-lo, mas envolve uma instrução "if" para verificar a existência de arquivos e a documentação especificamente diz que não faz isso dessa maneira.
Eu encontrei outra coisa que funcionou para mim (como eu estou usando gunicorn, eu não posso escolher o que passar)
Você deve conseguir se safar com
location /cargo {
rewrite ^/cargo(.*)$ $1 break;
try_files $uri $uri/ /cargo/index.php?_REWRITE_COMMAND=$uri&args;
}
Tags nginx