nginx 和 $document_root 上的斜杠?
Posted
技术标签:
【中文标题】nginx 和 $document_root 上的斜杠?【英文标题】:nginx and trailing slashes on $document_root? 【发布时间】:2011-01-30 17:12:59 【问题描述】:我对nginx使用如下配置:http://gist.github.com/340956
但是,此配置会导致 php 出现No input file specified
错误。我能够解决它的唯一方法是改变这一行:
fastcgi_param SCRIPT_FILENAME $document_root/$fastcgi_script_name;
注意$document_root
和$fastcgi_script_name
之间的“/”。我被告知这是错误的配置,但没有人能够确切地告诉我为什么我的配置需要这个额外的斜线。
我怎样才能去掉那个多余的斜线?
【问题讨论】:
【参考方案1】:刚刚遇到同样的问题(在RHEL6服务器上remi安装nginx+php-fpm),你可以通过在/etc/nginx/fastcgi_params中添加以下行来解决它
fastcgi_param SCRIPT_FILENAME $request_filename;
我发现这行在 RHEL 中缺失,而在完美运行的 Debian nginx 中。
【讨论】:
【参考方案2】:参数PATH_TRANSLATED
是否获得正确的URI?我认为这是 conf 文件中不计算的变量的直接连接。在它们之间添加斜线时,它们可能被正确解释。
当您收到错误 No input file specified
时,请检查您的日志以查看请求的 URI。
【讨论】:
当我收到No input file specified
错误时应该检查什么日志? nginx 日志不显示任何内容,因为错误是由 PHP 触发的。
我的$_SERVER
转储中没有PATH_TRANSLATED
。
nginx 记录的唯一内容是在访问日志中,它只会对任何使用重写的 URL 显示“404”。
这里的想法是找出请求的URI【参考方案3】:
删除第 3 行中的 try_files $uri index.php$uri;
。
【讨论】:
然后我的重写中断了,因为我有像/foo/bar
这样的 URL 重定向到 index.php/foo/bar
。【参考方案4】:
偏好问题。只要你保持一致,任何一种方式都可以。
在配置文件中添加斜线,并确保文档根目录和脚本名称的末尾和开头没有额外的斜线,反之亦然。
【讨论】:
我不买。我是否在 $root 中添加斜杠似乎没有什么区别。【参考方案5】:当您像这样显式添加根指令时会发生什么:
location ~ \.php$
# fastcgi_split_path_info ^(.+\.php)(.*)$;
include fastcgi.conf;
root /var/www/my_webroot;
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
【讨论】:
我的$root
在server ...
中定义是不是不够好?以上是关于nginx 和 $document_root 上的斜杠?的主要内容,如果未能解决你的问题,请参考以下文章