Discuz 在 nginx+fastcgi 环境下相对路径问题的解决

这几天在陆续用 apache 替换成 nginx,发现所有在用的 discuz 都出现了 php 脚本中相对路径的问题。比如 discuz 动态头像调用是类似于:

http://www.xxx.com/ucenter/avatar.php?uid=21480&size=middle

但是调用后的地址就变成了:

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 漏洞,可以参考。

This entry was posted in 我的慵懒生活 and tagged , , . Bookmark the permalink.

3 Responses to Discuz 在 nginx+fastcgi 环境下相对路径问题的解决

  1. Pingback: ubuntu server 10.10 安装配置 nginx + php-fpm + mysql | gkp's post

  2. Pingback: PHPer 成长记! » Blog Archive » ubuntu server 10.10 安装配置 nginx + php-fpm + mysql

  3. Pingback: ubuntu nginx + php-fpm + mysql | 云云网站

Leave a Reply

Your email address will not be published. Required fields are marked *


2 × = ten

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>