这几天在陆续用 apache 替换成 nginx,发现所有在用的 discuz 都出现了 php 脚本中相对路径的问题。比如 discuz 动态头像调用是类似于:
但是调用后的地址就变成了:
http://www.xxx.com/ucenter/avatar.php/ucenter/data/images/000/05/60/39_avatar_middle.jpg
查看源代码发现,discuz 中的相对路径都是直接写的文件名,前面没有 ./,与此同时还带来了批量上传 flash 文件无法调用 misc.php 导致提示文字无法显示,引用及提醒信息跳转地址错误等,一概都是由于指向了错误的 xxx.php/dir 这样的 url。感觉不应该是 nginx 的问题,于是查看 php.ini 相关设置,发现 cgi.fix_pathinfo 这个选项正是解决问题的关键,将这个值设置为 0 的话,PATH_TRANSLATED 将等同于 SCRIPT_FILENAME,之后重启 php-fpm 后 discuz 的这个问题就解决了。看来还是 discuz 7.2 代码兼容性的问题,不知道更新的 dzx 是否已经有所改进了?
UPDATE:发现今年5月有一个相关的 nginx 漏洞,可以参考。
Pingback: ubuntu server 10.10 安装配置 nginx + php-fpm + mysql | gkp's post
Pingback: PHPer 成长记! » Blog Archive » ubuntu server 10.10 安装配置 nginx + php-fpm + mysql
Pingback: ubuntu nginx + php-fpm + mysql | 云云网站