對於thinkphp框架項目的訪問格式有多種,其中pathinfo是默認的基本訪問格式,格式為:http://hostname:port/index.php/模塊名/action名/參數1/參數1的值/
pathinfo其實就是一個參數,可以通過$_SERVER['PATH_INFO']獲得,thinkphp框架通過解析它來找到對應的模塊和方法。
apache服務器默認是支持pathinfo的,但是nginx服務器默認不支持這種格式,需要進行配置,配置方式如下:
以下是mac下的MNMP中的nginx配置
1. 找到ngingx的配置文件nginx.conf
在server里的location項,
修改前為:
server { listen 7888; server_name local.tpdemo.com; root /Applications/MAMP/htdocs/thinkphp_demo/; access_log /Applications/MAMP/logs/nginx_tpdemo_access.log; error_log /Applications/MAMP/logs/nginx_tpdemo_error.log debug; location / { index index.html index.htm index.php; location ~ \.php { try_files $uri =404; fastcgi_pass unix:/Applications/MAMP/Library/logs/fastcgi/nginxFastCGI.sock; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; include fastcgi_params; } } }
修改后為:
server { listen 7888; server_name local.tpdemo.com; root /Applications/MAMP/htdocs/thinkphp_demo/; access_log /Applications/MAMP/logs/nginx_tpdemo_access.log; error_log /Applications/MAMP/logs/nginx_tpdemo_error.log debug; location / { index index.html index.htm index.php;
#重寫隱藏掉index.php部分 #如果請求既不是一個文件,也不是一個目錄,則執行一下重寫規則 if (!-e $request_filename) { #地址作為將參數rewrite到index.php上。 rewrite ^/(.*)$ /index.php/$1; #若是子目錄則使用下面這句,將subdir改成目錄名稱即可。 #rewrite ^/subdir/(.*)$ /subdir/index.php/$1; } location ~ \.php { try_files $uri =404; fastcgi_pass unix:/Applications/MAMP/Library/logs/fastcgi/nginxFastCGI.sock; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; include fastcgi_params; #定義變量 $path_info ,用於存放pathinfo信息 set $path_info ""; #定義變量 $real_script_name,用於存放真實地址 set $real_script_name $fastcgi_script_name; #如果地址與引號內的正則表達式匹配 if ($fastcgi_script_name ~ "^(.+?\.php)(/.+)$") { #將文件地址賦值給變量 $real_script_name set $real_script_name $1; #將文件地址后的參數賦值給變量 $path_info set $path_info $2; } #配置fastcgi的一些參數 fastcgi_param SCRIPT_NAME $real_script_name; fastcgi_param PATH_INFO $path_info; } } }
2. 編輯php.ini文件
注釋掉配置項cgi.fix_pathinfo(前面加;)
3.重啟phpcgi 和 nginx