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