Forum » Programiranje » [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":
Končna rešitev:
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.
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
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;
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 ...
Tema | Ogledi | Zadnje sporočilo | |
---|---|---|---|
Tema | Ogledi | Zadnje sporočilo | |
» | Postavitev mySQLOddelek: Programiranje | 2398 (1976) | M01O |
» | Ipv6 dosegljivostOddelek: Slo-Tech | 3041 (2255) | AndraZK |
» | PopCorn Hour A-100 in A-110 HD predvajalnik (strani: 1 2 )Oddelek: Zvok in slika | 16278 (8210) | LuGi |
» | LaTeX (linux newbie, ne se jezit:) (strani: 1 2 )Oddelek: Programska oprema | 8449 (6819) | CaqKa |
» | Photoshop ne dovoli ponarejanja denarja?Oddelek: Novice / Ostala programska oprema | 4475 (4475) | Filo |