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 ()
133780 ::
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: 133780 ()
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 | 2497 (2075) | M01O |
| » | Ipv6 dosegljivostOddelek: Slo-Tech | 3127 (2341) | AndraZK |
| » | PopCorn Hour A-100 in A-110 HD predvajalnik (strani: 1 2 )Oddelek: Zvok in slika | 16445 (8377) | LuGi |
| » | LaTeX (linux newbie, ne se jezit:) (strani: 1 2 )Oddelek: Programska oprema | 8625 (6995) | CaqKa |
| » | Photoshop ne dovoli ponarejanja denarja?Oddelek: Novice / Ostala programska oprema | 4551 (4551) | Filo |