Utf 8 使用pcre 8.3在nginx上使用unicode URL重写规则失败
我也有类似的问题。然而,我设法用最新的PCRE(8.30)编译了nginx(1.0.14),将重写规则更改为使用UTF8,但仍然失败 我的重写规则是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
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里面,那么它将*不起作用。这可能会有帮助。