Problems with some rewrite

Igor Sysoev igor at sysoev.ru
Tue Aug 24 16:25:56 MSD 2010


On Tue, Aug 24, 2010 at 03:15:46AM -0400, revirii wrote:

> 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 :-)

You DO need the locations, but you DO NOT need the rewrites.
Why do you use space in "([0-9] {2}" ?
Here is example for 2 numbers location:

     # 2 numbers
     location ~ ^/img/default/-?(\d{2})/.+\.(.+)$ {
         alias /home/images/public/$1x/xxx/$1/default.$2;
     }


-- 
Igor Sysoev
http://sysoev.ru/en/



More information about the nginx mailing list