Como remover uma chave de consulta GET no NGINX e usar o valor GET como URI?

1

Eu tenho um script de verificação de e-mail que se parece com isso:

link

E eu quero que seja assim:

link

Essencialmente, apenas removendo a parte index.php?t= da URL, mas ainda permitindo que o arquivo index.php processe o token.

Eu tentei as três configurações a seguir e nenhuma delas funcionou:

location /v/ {
    try_files index.php$args;
}

Os resultados acima resultam em um arquivo nginx.conf com falha

location ^~ /v/ {
    try_files /v/index.php?q=$uri;
}

Os resultados acima resultam em um arquivo nginx.conf com falha

location ^~ /v/ {
    rewrite ^/v/index.php?q=(.*)$ $1 permanent;
}

O acima passa pelos requisitos do arquivo nginx.conf, mas ainda não faz o que eu gostaria. Ele mostra um erro 404 ao acessar o link

Qualquer ajuda seria muito apreciada.

    
por darkAsPitch 31.05.2015 / 23:14

1 resposta

3

Primeira coisa: ^~ usage não é necessário se você não tiver nenhum regex correspondente a esse padrão antes do local que está definindo. O que você quer fazer é basicamente ter URIs apropriados e reescrevê-los para passar um argumento para o seu aplicativo php. Nesse caso, a solução apropriada está usando reescrever.

A coisa que você perdeu lá é que o URI com o qual você está combinando é o primeiro argumento para a diretiva reescrever, portanto, obviamente, ele não pode corresponder a ^/v/index.php?q=(.*)$ , pois é igual a /v/TOKEN_EMAILED_TO_CLIENT . O segundo argumento para a diretiva reescrever é o URI para reescrever.

Então, se você tiver um local desse tipo que manipule .php files:

location ~ \.php$ {
     [ ... ]
}

Então você precisa deste bloco de localização:

location /v/ {
    rewrite ^/v/(.*)$ /v/index.php?t=$1? last;
}
    
por 01.06.2015 / 00:44

Tags