Estou alcançando o resultado desejado com o seguinte snippet de configuração:
location = / {
index index.php;
}
location / {
try_files $uri /index.php?tags=$request_uri;
}
try_files
tenta ... arquivos. Quando você procura /
com ele, você procura por um arquivo com o mesmo nome, ele não é interpretado como 'localizar o arquivo de índice'. index
faz esse trabalho. Portanto, você precisa separar esse caso especial do local padrão de retorno.
A melhor parte é o seu último desejo: os argumentos nem serão codificados, pois não precisam (apenas o primeiro ponto de interrogação de um URI é relevante, já que tudo o que segue é um argumento).
Lembre-se do uso de $request_uri
(que contém o URI solicitado, com argumentos, mas não normaliza / limpa) em vez do normalizado $uri
(que limpa o URI e remova argumentos). Assim você pode acabar com:
///foo?bar=yes => index.php?tags=///foo?bar=yes
Se você se preocupa com isso, pode usar $uri
em combinação com $args
:
location = / {
index index.php;
}
location / {
try_files $uri /index.php?tags=$uri?$args;
}
produzindo:
///foo?bar=yes => index.php?tags=/foo?bar=yes