nginx localização regex com chaves e citações não funciona

1

Eu tenho um site rodando em nginx. Preciso reescrever URLs como este:

domain.com/blabla/88-aaa-aaaaa-aaaa/qqqq-qqq11-2qq-qqq.html

para isso

domain.com/blabla/aaa-aaaaa-aaaa/qqqq-qqq11-2qq-qqq

significa - remova o número após a barra, seguido por um traço e, em seguida, a extensão ".html".

Para conseguir isso, eu tentei usar

location ~* \/[0-9]{1,4}(-.*)(\.html)$ {
   ......
}

mas no testador de localização, ele ignora completamente o traço e corresponde a .../88aaa... , que desejo evitar. Então eu li, que se a expressão contiver chaves, aspas simples ou duplas devem ser usadas ao redor da expressão. Então eu tentei isso

location ~* "\/[0-9]{1,4}(-.*)(\.html)$" {
   ......
}

Ainda sem sorte ... Com as aspas, ele não corresponde ao local nos dois casos. Alguém poderia me ajudar?

    
por j.kaspar 16.09.2017 / 01:20

2 respostas

0

A solução que finalmente usei para esse problema específico com a localização, contendo chaves é evitá-las e repita o bloco de localização para cada combinação possível. Isso significa

location ~* /[0-9](-.*)(\.html)$ {

para ... / 8 -...

location ~* /[0-9][0-9](-.*)(\.html)$ {

para ... / 88 -...

location ~* /[0-9][0-9][0-9](-.*)(\.html)$ {

para ... / 888 -... html.

    
por 18.09.2017 / 12:57
0

Você pode simplificá-lo com + , o que significa "pelo menos um deles"

location ~* /[0-9]+(-.*)(\.html)$ {

    
por 05.10.2017 / 11:48

Tags