Utf 8 使用pcre 8.3在nginx上使用unicode URL重写规则失败

Utf 8 使用pcre 8.3在nginx上使用unicode URL重写规则失败,utf-8,nginx,rewrite,Utf 8,Nginx,Rewrite,我也有类似的问题。然而,我设法用最新的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

我也有类似的问题。然而,我设法用最新的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脚本使用nginx只将一个参数(src)输入到
$\u GET
数组中,但是使用apache rewrite,它被分解为不同的参数…

在我将相同的问题发布到那里之后,最终解决了这个问题

用此代码段替换重写规则使此工作正常

   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;
    }

我要补充一件重要的事情:如果你不把(UTF8)放在regexp位置,然后把它放在你的rewrite regexp里面,那么它将*不起作用。这可能会有帮助。