» »

[Nginx] Današnji regex session

[Nginx] Današnji regex session

HotBurek ::

Buen día.

Evo, da podelim današnji 1~2 urni session z nginx config-om ter spletnim orodjem.

Želja je redirectat vse requeste iz:

/image/012345678/012345678/test-128.jpeg
/image/012345678/012345678/neki-test-128.jpeg

Na:

/image/012345678/012345678/128.jpeg

Ena izmed večjih zagonetk je (bila in je še), zakaj regex za 9 cifer ne dela:

\d{9} vrne error (neki na temo PCRE)
\d\{9\} gre skos nginx -t, a ne matcha 9 cifer
\\d{9} isto vrne error
\\d\{9\} gre skos nginx -t, a ne matcha 9 cifer

Spletno orodje pravi, da nas 9 od 10 tripne na nginx + PCRE combotu.

Recimo tale config: location ~ ^/image/\d\{9\}/$

Ne potegne notri tegale URL-ja: /image/000000000/

Zadevo sem šel preverjat z \d\d\d\d\d\d\d\d\d, in ta pa dela.

Krneki.

Na koncu, ko je že skoraj delalo, sem pa imel redirecte iz "128.jpeg" ne "128.jpeg".

Zadevo se popravi tako, da se premenit (?:[^/-]+-)* v (?:[^/-]+-)+

(na koncu je +, namesto *)

Glavno, da dela, in da lahko to reč seadj zaprem.

Nginx config "log":

# image redirects
#       location ~ ^/image/(\d\{9\})/(\d\{9\})/[^/]*-(\d+)\.(jpeg)$ {
#               rewrite ^/image/(\d\{9\})/(\d\{9\})/[^/]*-(\d+)\.(jpeg)$ /image/$1/$2/$3.$4 permanent;
#       }

#       location ~ ^/image/(\d\{9\})/(\d\{9\})/[^/]*-(\d+)\.(jpeg|jpg|png|gif)$ {
#    return 302 /image/$1/$2/$3.$4;
#}

#location ~ ^/image/(\d\{9\})/(\d\{9\})/(?:[^/-]+-)*(\d+)\.(jpeg)$ {
#    return 200 "F1:$1 F2:$2 F3:$3 EXT:$4";
#       access_log /var/log/nginx/www.akopli.com/access-image-redirect.log main;
#                error_log /var/log/nginx/www.akopli.com/error-image-redirect.log;
#}

#location ~ ^/image/(\d{9})/(\d{9})/(?:[^/-]+-)*(\d+)\.(jpeg)$ {
#    rewrite ^ /image/$1/$2/$3.$4 permanent;
#}

#location ~ ^/image/(\d\{9\})/(\d\{9\})/(?:[^/-]+-)*(\d+)\.(jpeg)$ {
#    rewrite ^ /image/$1/$2/$3.$4 permanent;
#}

#location ~ ^/image/(\d\{9\})/(\d\{9\})/.+-(\d+)\.(jpeg)$ {
#    rewrite ^ /image/$1/$2/$3.$4 permanent;
#       access_log /var/log/nginx/www.akopli.com/test-a.log main;
#       error_log /var/log/nginx/www.akopli.com/test-b.log;
#}

#location ~ ^/image/\d\{9\}/$ {
#    return 200 "location /image/ matched\n";
#}

#location ~ ^/image/(\d\d\d\d\d\d\d\d\d)/(\d\d\d\d\d\d\d\d\d)/(?:[^/-]+-)*(\d+)\.(jpeg)$ {
#    rewrite ^ /image/$1/$2/$3.$4 permanent;
#}

Končna rešitev:
# image rewrite
# from: some-name-128.jpeg
# to: 128.jpeg
location ~ ^/image/(\d\d\d\d\d\d\d\d\d)/(\d\d\d\d\d\d\d\d\d)/(?:[^/-]+-)+(\d+)\.(jpeg)$ {
    rewrite ^/image/(\d\d\d\d\d\d\d\d\d)/(\d\d\d\d\d\d\d\d\d)/(?:[^/-]+-)+(\d+)\.(jpeg)$ /image/$1/$2/$3.$4 permanent;
}

Sedajle gledam config... zanimivo, da ni pravilna rešitev v rewrite-u: /image/$1/$2/$4.$5

Se pravi, če so skupine:

$1 (\d\d\d\d\d\d\d\d\d)
$2 (\d\d\d\d\d\d\d\d\d)
$3 (?:[^/-]+-)
$4 (\d+)
$5 (jpeg)

Potem, glede na to, da hočem odstranit tisto, kar matcha (?:[^/-]+-) in da je ta tretji capture group, ga kot takega ne bi smel uporabit v rewrite-u... I dont know.

Sem šel potestirat, in so samo štirje captur group-i. Zanimivo, da tega ( (?:[^/-]+-) ) ne šteje.

Let's move one.
root@debian:/# iptraf-ng
fatal: This program requires a screen size of at least 80 columns by 24 lines
Please resize your window
  • spremenilo: HotBurek ()

socialec ::

Tukaj preverjaj - vprašanje, če je kdo na forumu dovolj geeky, da ti bo mentalno interpretiral te znakce, po možnosti samo za slavo, če so malo bolj kompleksni patterni :D

Zgodovina sprememb…

  • spremenilo: socialec ()

Spura ::

(?: ....) je non-capturing group.

Ne vem zakaj rabis tolk capture groupov:

rewrite ^(/image/\d\d\d\d\d\d\d\d\d/\d\d\d\d\d\d\d\d\d/)(?:[^/-]+-)+(\d+\.jpeg)$ $1/$2 permanent;


Vredno ogleda ...

TemaSporočilaOglediZadnje sporočilo
TemaSporočilaOglediZadnje sporočilo
»

Postavitev mySQL

Oddelek: Programiranje
92398 (1976) M01O
»

Ipv6 dosegljivost

Oddelek: Slo-Tech
303041 (2255) AndraZK
»

PopCorn Hour A-100 in A-110 HD predvajalnik (strani: 1 2 )

Oddelek: Zvok in slika
7516278 (8210) LuGi
»

LaTeX (linux newbie, ne se jezit:) (strani: 1 2 )

Oddelek: Programska oprema
768449 (6819) CaqKa
»

Photoshop ne dovoli ponarejanja denarja?

Oddelek: Novice / Ostala programska oprema
374475 (4475) Filo

Več podobnih tem