rewrite rule failing with unicode urls on nginx with pcre 8.3

Maxim Dounin mdounin at mdounin.ru
Wed Mar 21 10:41:00 UTC 2012


Hello!

On Tue, Mar 20, 2012 at 12:06:36PM -0400, yoavaner wrote:

> First post on the list, so please be gentle :)
> 
> I asked this question on stackoverflow, but wasn't getting any love
> there, and then realised I should go to the source!
> 
> I managed to get nginx (1.0.14) compiled with the latest PCRE (8.30),
> changed the rewrite rule to use UTF8, but it still fails in some cases
> with unicode characters. 
> 
> My rewrite rule is
> 
>     location / {
>         try_files $uri $uri/ /index.php;
>         rewrite "(*UTF8)^/imgthumb/(.*)$" /timthumb.php?$1 last;
>     }
> 
> This works fine with images without unicode, but fails when the filename
> contains unicode characters.
> 
> so
> `/imgthumb/src=/wp-content/uploads/8姉妹の古いマトリョーシカ.jpg&h=121&w=137&zc=1`
> **fails**
> 
> but `/imgthumb/src=/wp-content/uploads/MOD0005.jpg&h=121&w=137&zc=1`
> **works** fine.
> 
> On Apache using .htaccess rewrite rule, it works with both
> 
> `RewriteRule ^/imgthumb/(.*)$ /timthumb.php?$1 [L]`
> 
> I noticed that the problem seems to stem from the fact that the PHP
> script gets only one parameter (src) into the `$_GET` array with nginx,
> but with apache rewrite it's broken down to different parameters...

This a problem in rewrite handling, it inconsistently escapes $1 
in some cases but not in others.  And it's not really related to 
unicode, just any escaped char in uri will be enough to trigger 
escaping.

This needs fixing.

> Is my nginx rewrite rule wrong? Is there a way to make this work?

Avoid using rewrites.

Maxim Dounin



More information about the nginx mailing list