这个问题纠结了我好久,多次修改配置文件,然后添加了PathInfo后解决.
第一次配置PathInfo
server {
#listen 8080;
server_name localhost www.phpthink.com;
root /Users/admin/Sites/PHP/; # 该项要修改为你准备存放相关网页的路径
location /PHP/ {
root html;
index index.html index.htm index.php l.php;
autoindex on;
if (!-e $request_filename) {
rewrite ^/PHP/(.*)$ /PHP/index.php/$1 last;
}
}
#proxy the php scripts to php-fpm
location ~ \.php {
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_param PATH_INFO $1; # 把pathinfo部分赋给PATH_INFO变量
include fastcgi_params;
}
}
第一次配置完之后,只是配置了PathInfo的根路径,并没有配置SCRIPT_NAME 所以导致不绑定模块根本无法
去访问多个模块以及controller里的方法,所以第二个配制方法是加入SCRIPT_NAME的配置方法,最终采用第二种
第二次配置PathInfo
server {
#listen 8080;
server_name localhost www.phpthink.com;
root /Users/admin/Sites/PHP/; # 该项要修改为你准备存放相关网页的路径
index index.html index.htm index.php l.php;
location / {
index index.php;
if (!-e $request_filename) {
rewrite ^/(.*)$ /index.php/$1 last;
break;
}
}
#proxy the php scripts to php-fpm
location ~ \.php {
set $script $uri;
set $path_info "/";
if ($uri ~ "^(.+\.php)(/.+)") {
set $script $1;
set $path_info $2;
}
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php?IF_REWRITE=1;
include fastcgi_params;
fastcgi_param PATH_INFO $path_info;
fastcgi_param SCRIPT_FILENAME $document_root/$script;
fastcgi_param SCRIPT_NAME $script;
}
}
网友评论