nginx - corresponde a todos os caminhos, exceto um

3

Estou tentando corresponder todos os caminhos que começam com / newsletter / exceto um (/ newsletter / one) com um regex. O que eu tenho até agora:

   location ~ ^/newsletter/(.*)$ {
// configuration here
}

Isso corresponde a todos os caminhos que começam com / newsletter /.

Como faço uma exceção para o caminho / boletim informativo / um?

    
por dasj19 25.11.2016 / 08:54

4 respostas

4

Acabei usando a seguinte solução:

location ~ ^/newsletter/(.*)$ {
    location ~ /newsletter/one(.*) {
           // logic here
    }
    // logic here
}

Isso corresponde a todos os caminhos em / newsletter / * e, em seguida, eu coincide todos os caminhos que começam com / newsletter / one e aplico a configuração para o boletim informativo / um no bloco de configuração interna enquanto mantenho o resto da configuração o bloco de configuração externa.

    
por 01.12.2016 / 15:01
2

Isso funciona, mas tem uma falha. Também não corresponderá a "um" seguido por quaisquer caracteres.

location ~ ^/newsletter/(?!one).*$ {
    //configuration here
}

Embora isso possa ser melhor:

location = /newsletter/one {
    // do something (not serve an index.html page)
}

location ~ ^/newsletter/.*$ {
    // do something else
}

Isso funciona porque, quando o Nginx encontra uma correspondência exata com um = , ele usa esse location para processar a solicitação. Um problema é que isso não corresponderá se você estiver usando uma página index porque a solicitação é reconfigurada internamente e, portanto, corresponderá à segunda location "better" e a usará. Veja o seguinte: link

Há uma seção que explica como o Nginx escolhe qual local usar.

    
por 25.11.2016 / 10:09
1

Para esclarecer a solução da varlogtim, o seguinte funcionaria, permitindo que você correspondesse em /newsletter/one-time , mas ainda ignorasse /newsletter/one

location ~ ^/newsletter/(?!one$).*$

Além disso, se você quiser ignorar o caso de sua correspondência, use o modificador ~* no lugar de ~

    
por 04.08.2017 / 21:40
0

Aqui está o seguinte:

^/newsletter(/&/[^o][^n][^e])$
    
por 29.06.2018 / 22:49

Tags