Remover "? xx = yy" parte do parâmetro querystring de $ args em nginx

3

Desenvolvedor aqui, com habilidades próximas a zero * nix. Depois de googlar por algumas horas, acabei aqui esperando encontrar uma solução para esse problema:

Eu tenho um site simples configurado assim:

server {
 listen 80 default_server;
 listen [::]:80 default_server ipv6only=on;

 root /data/www/example.com;

 server_name example.com;

 location / {
    index index.html$args;
    try_files $uri$args $uri$args/ $uri/ /index.html$args =404;
 }
}

e preciso do nginx para encaminhar rotas como

example.com/path1/path2/path3?param=value

para

example.com/index.html/path1/path2/path3

(Eu tenho um aplicativo angularJS que ouve esse tipo de rotas)

O problema é que sempre que eu obtenho uma rota que inclui um ? param = valor no final eu recebo a página 404. Todas as outras rotas aninhadas são encaminhadas corretamente (por exemplo: example.com/path1/path2/path3 vai para example.com/index.html/path1/path2/path3 ).

Alguma idéia para me livrar de problemas?

    
por bosch 11.12.2015 / 01:49

1 resposta

2

Você tem $args inserido em lugares inadequados. Conforme indicado pelo documento , o $args (que é equivalente a $query_string ) contém tudo seguindo o separador ? . O $uri contém tudo, incluindo o pathinfo.

try_files está verificando a existência de nomes de arquivos concatenando o root com o elemento fornecido. Então você provavelmente deveria estar usando:

try_files $uri $uri/ /index.html?path=$uri;

O elemento final deve ser um URI padrão (como /index.html ) ou uma ação de erro (como =404 ) e não ambos . Consulte este documento para obter detalhes.

Não estou familiarizado com o envio de pathinfo para um arquivo HTML, a não ser usando um parâmetro. index.php$uri funciona ok, mas index.html$uri apenas produz um erro 500.

    
por 11.12.2015 / 10:11

Tags