使用pcre 8.3在nginx上使用unicode url重写规则失败

时间:2012-03-18 08:53:19

标签: utf-8 nginx rewrite

我遇到与the one described on this question类似的问题。但是,我设法使用最新的PCRE(8.30)编译nginx(1.0.14),将重写规则更改为使用UTF8,但它仍然失败。

我的重写规则是

location / {
    try_files $uri $uri/ /index.php;
    rewrite "(*UTF8)^/imgthumb/(.*)$" /timthumb.php?$1 last;
}

这适用于没有unicode的图像,但是当文件名包含unicode字符时会失败。

所以/imgthumb/src=/wp-content/uploads/8姉妹の古いマトリョーシカ.jpg&h=121&w=137&zc=1 失败

/imgthumb/src=/wp-content/uploads/MOD0005.jpg&h=121&w=137&zc=1 有效

在使用.htaccess重写规则的Apache上,它适用于

RewriteRule ^/imgthumb/(.*)$ /timthumb.php?$1 [L]

我的nginx重写规则是错误的吗?有没有办法使这项工作?

更新: 我注意到这个问题似乎源于这样一个事实:PHP脚本只有一个参数(src)带有nginx到$_GET数组,但是apache重写后它被分解为不同的参数......

1 个答案:

答案 0 :(得分:3)

我在那里发布了相同的问题后,解决方案最终provided by Valentin V. Bartenev on the nginx forum

使用此代码段替换重写规则使这项工作变得有效!!

   location ~ (*UTF8)^/imgthumb/(.*)$ {
            fastcgi_pass    unix:/var/spool/phpfpm.sock;
            include         fastcgi_params;
            fastcgi_param   SCRIPT_FILENAME    $document_root/timthumb.php;
            fastcgi_param   SCRIPT_NAME        /timthumb.php;
            fastcgi_param   QUERY_STRING $1;
    }