nginx localização do servidor para uma única página

1

Eu só quero definir um local para uma única página:

/showthread.php?t=2589&page=3

(e outras páginas 1,2 também)

Estou escrevendo na configuração:

location ~* ^.+showthread\.php\?t=2589.+$ {

Este testador on-line diz que a string corresponde a: link Mas na verdade isso não acontece. WTF O nginx usa regexp "especial" ou o quê? Como fazer a expressão correta?

    
por ABTOMAT 16.03.2012 / 20:09

2 respostas

1

Use um til:

location ~ ^.+showthread.php\?t=2589.+$

para indicar um regex, caso contrário o nginx o trata como literal.

Atualização:

Sinto muito, eu estava lendo muito rapidamente e concentrei-me em seu erro de digitação em vez da string de consulta.

Então, o truque é que "location" coincide com a localização, que é /showthread.php. O resto da sua string de consulta são parâmetros GET e não estarão na coisa que você está tentando combinar com o padrão.

Veja a documentação:

link

Então, você precisa de algo como:

location /showthread.php {
  if ($arg_t = '2589') {
     # do some stuff
  }
}
    
por 16.03.2012 / 20:15
0

As localizações do Nginx correspondem apenas ao radical do URI e não aos parâmetros transmitidos (o material após o ponto de interrogação).

Assim, sua localização precisará ser algo simples como

  location /showthread.php {/*some stuff*/}

Se você quiser um comportamento diferente do nginx dependendo do valor dos parâmetros, você provavelmente terá que usar um bloco if dentro daquele local com um regex nos parâmetros para reescrever / redirecionar ou fazer qualquer outra coisa necessidade.

Se você controlar o showthread.php, provavelmente é melhor adicionar essa complexidade lá do que na configuração do nginx.

Consulte este link para obter mais informações.

    
por 16.03.2012 / 20:32

Tags