我正在使用Linux Debian WheezY和PHP 5.5.1以及Nginx 1.6.2并搜索打开带有德语变音符号的文件的解决方案,例如vögel.jpg或带有德语变音符号的目录中的文件,但它出现了只有错误404 Not Found nginx / 1.6.2。
如果我用f6(öISO-8859-1和ascii)而不是vögel.jpg键入v%f6gel.jpg,它就可以工作,文件显示在Browserwindow中。
如果我用%C3%B6(öUTF-8)而不是vögel.jpg键入v%C3%B6gel.jpg,则文件名将在url字段中设置为vögel.jpg,并且不会显示任何内容。
我的Nginx设置为:
source_charset utf-8;
charset utf-8;
override_charset on;
charset和source_charset根据Nginx homepage确定将charset utf-8添加到“Content-Type”响应头,但是,我不知道是否为jpg文件使用了响应头。
如果使用ascii或ISO-8859-1或其他字符集而不是utf-8,则问题保持不变:
source_charset iso-8859-1;
charset iso-8859-1;
source_charset utf-8;
charset iso-8859-1;
如果包括nginx charset maps没有任何变化:
include koi-utf;
include koi-win;
include win-utf;
这样看似没有影响:
source_charset ascii;
charset utf-8;
override_charset on;
charset_map ascii utf-8 {
f6 c3b6;
}
或
charset_map iso-8859-1 utf-8 {
f6 c3b6;
}
或
charset_map utf-8 ascii {
c3b6 f6;
}
nginx错误:无效值“c3b6”
或
charset_map utf-8 iso-8859-1 {
c3b6 f6;
}
nginx错误:无效值“c3b6”
我的nginx fastcgi设置
location ~ \.php$ {
fastcgi_split_path_info ^(.+\.php)(/.+)$;
try_files $uri $uri/ =404;
fastcgi_pass unix:/var/run/php5-fpm.sock;
fastcgi_index index.php;
include fastcgi_params;
}
whithout fastcgi也没有变化。
根据PHP使用echo mb_detect_encoding($ filename); jpg文件编码是ascii,但如果我将其更改为utf-8,则无法在浏览器中打开jpg文件,如下所示:vögel.jpg
即使没有nginx字符集,一切都保持不变。有谁知道这个问题可能是什么解决方案,还是nginx根本不可能在文件名中使用变音符号?非常感谢
答案 0 :(得分:0)
检查你的php.ini文件中是否有default_charset = "UTF-8"
这一行,以使你的php文件默认使用该charset
答案 1 :(得分:0)
检查您的文件名是什么编码。
$ LC_ALL=C ls --quoting-style=c v*
"v\303\266gel.jpg" "v\366ogel.jpg"
这里首先是UTF-8中的vögel.jpg
和ISO-8859-1中的第二个。
如果您有第二个变体,那么您可能需要重命名文件。