昨天安装了echo模块。于是有点凌乱了
俺一直以为
$document_root$fastcgi_script_name链接起来就是SCRIPT_FILENAME
这个值应该和
$request_filename 一致,
应该就是要访问的php文件在硬盘上物理路径。
但是用echo模块后发现request_filename变量可以为空。
centos6.3 x64+nginx 1.2.1
# /usr/local/nginxad/sbin/nginx -V
nginx version: nginx/1.2.1
built by gcc 4.4.6 20120305 (Red Hat 4.4.6-4) (GCC)
TLS SNI support enabled
configure arguments: --user=www --group=www
--prefix=/usr/local/nginxad
--with-pcre=/usr/local/src/lemppackages/pcre-8.30
--with-http_stub_status_module
--with-http_ssl_module
--with-http_sub_module
--with-md5=/usr/lib
--with-sha1=/usr/lib
--with-http_gzip_static_module
--without-mail_pop3_module
--without-mail_imap_module
--without-mail_smtp_module
--add-module=/usr/local/src/agentzh-memc-nginx-module-4007350
--add-module=/usr/local/src/echo-nginx-module
虚拟主机的配置文件为
location / {
#root /usr/share/nginx/html;
index index.html index.htm index.php;
}
location ~ ^/testxxx/.+\.php$ {
alias /data/wwwroot/test1/test2/$1;
rewrite /testxxx/(.+\.php) /$1 break;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
# fastcgi_param SCRIPT_FILENAME /data/wwwroot/test1/test2$fastcgi_script_name;
include fastcgi_params;
echo_after_body "document_root: " $document_root;
echo_after_body "fastcgi_script_name: " $fastcgi_script_name;
echo_after_body "uri: " $uri;
echo_after_body "request_uri: " $request_uri;
echo_after_body "request_filename: " $request_filename;
echo_after_body "==========================";
}
location ~ \.php$ {
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
t1.php=============这个就是t1.php的内容。解析完全正确
document_root: /data/wwwroot/test1/test2/t1.php
fastcgi_script_name: /t1.php
uri: /t1.php
request_uri: /testxxx/t1.php
request_filename:
==========================
求问:为什么request_filename为空。但是内容还能被解析出来呢?
难道 SCRIPT_FILENAME的值才是要访问的实际文件么??
为什么 document_root和fastcgi_script_name拼接出来的值居然是/data/wwwroot/test1/test2/t1.php??