Problems with some rewrite

revirii nginx-forum at nginx.us
Tue Aug 24 11:15:46 MSD 2010


Greetings,

i'm currently facing a problem with some rewrites. Given an url i have
to rewrite it to a local folder.

url: www.domain.com/img/default/420006675369688559/image.png
doc root: /home/images/public/
local path (under doc root): 420/006/420006675369688559/default.png

So the rewrite rule should take the number and split it, taking the 1st
(420) and 2nd (006) three numbers out of the url and rewrite it to the
local path. But the number isn't always that long, it may also be only 1
to 5 places long, e.g. 1, 12345 and 456 are possible. If the number is
less than 6 places long, the rewrite should fill up the missing places
with the character x.

Optional there's a hyphen in front of the long number, e.g.
/img/default/[b]-[/b]420006675369688559/image.png

Brilliant concept, but i wasn't asked... So far, so bad. So i wrote some
rules, but as you might suggest, they don't work. Here they are...

[code]
        # 1 number
        location "/img/default/-?([0-9] {1})/$" {
            rewrite "/img/default/([0-9-] {1})/(.*)\.(.*)$"
/$1xx/xxx/$1/default.$3;
        }
        # 2 numbers
        location "/img/default/-?([0-9] {2})/$" {
            rewrite "/img/default/([0-9-] {2})/(.*)\.(.*)$"
/$1x/xxx/$1/default.$3;
        }
        # 3 numbers
        location "/img/default/-?([0-9] {3})/$" {
            rewrite "/img/default/([0-9-] {3})/(.*)\.(.*)$"
/$1/xxx/$1/default.$3;
        }
        # 4 numbers
        location "/img/default/-?([0-9] {4})/$" {
            rewrite "/img/default/([0-9-] {3})([0-9] {1})/(.*)\.(.*)$"
/$1/$2xx/$1$2/default.$3;
        }
        # 5 numbers
        location "/img/default/-?([0-9] {5})+/$" {
            rewrite "/img/default/([0-9-] {3})([0-9] {2})/(.*)\.(.*)$"
/$1/$2x/$1$2/default.$3;
        }
        # 6 or more numbers
        location "/img/default/-?[0-9]+/$" {
            rewrite "/img/default/(-?[0-9]+ {3})(-?[0-9]+
{3})(-?[0-9]+)/(.*)\.(.*)$" /$1/$2/$3/default.$5 break;
        }
[/code]

Maybe i don't even need the locations... I've tried the last rule alone,
with a rewrite to a website, but even that doesn't work, so there must
be some severe (logical) error in the location/rewrite rule.

Any help would be weclome :-)

Posted at Nginx Forum: http://forum.nginx.org/read.php?2,123057,123057#msg-123057




More information about the nginx mailing list