解決nginx不支持thinkphp中pathinfo的問題
下面小編通過文字加代碼的方式給大家詳解下,具體內(nèi)容如下:
其實(shí),要解決nginx不支持pathinfo的問題,有兩個(gè)解決思路,一是不使用pathinfo模式,二是修改nginx的配置文件,使它支持pathinfo。為了使問題簡單化,我選擇了第一種方式,因?yàn)榫偷诙N方式,我查了很多資料,發(fā)現(xiàn)大家的方法不盡相同,有的還差別很大,容易造成誤導(dǎo),所以我選擇從簡出發(fā),選擇普通模式,雖然有一定的風(fēng)險(xiǎn)。當(dāng)把index.php對應(yīng)的前臺代碼修改完畢之后,發(fā)現(xiàn)前臺基本正常,可是后臺仍然出現(xiàn)重定向的問題。折騰了半天之后,我才想到看一下日志文件,原來是編輯器的問題,看來日志文件真的很重要,以前一直不重視。在config.php文件的第一行出現(xiàn)了輸出,
在sublime下,一般會為UTF-8文件添加BOM頭,這個(gè)BOM頭在window下通常是看不見的,可以通過其他的編輯器查看到,Linux下也可以直接看到,通常顯示出來是一個(gè)亂碼字符,把這個(gè)字符刪除即可,或者簡單一點(diǎn),直接在第一行回車,再刪除就可以了。到這里,后臺基本可以訪問了。
1.在登錄的時(shí)候,我是通過外部js文件發(fā)送Ajax請求進(jìn)行驗(yàn)證的,在js與ThinkPHP模塊函數(shù)通信遇到了點(diǎn)問題,一直不知道正確的路徑該怎么寫,也沒有查到相關(guān)資料,只能各種試,好在找到了解決辦法,通過直接帶上入口文件名的方式
var url="system.php?m=Login&a=doLog"; $.post(url,{"staffname":$staffname,"staffpwd":$staffpwd,"verifycode":$verifycode},function(data){ if(data=="codeerr"){ alert("驗(yàn)證碼錯(cuò)誤!"); }else if(data=="authempty"){ alert("請輸入用戶名或密碼!") }else if(data=="autherr"){ alert("用戶名或密碼錯(cuò)誤!"); }else if(data=="success"){ alert("登錄成功!"); location.href="system.php?m=Index&a=index"; //訪問首頁 }
當(dāng)然,此為普通模式下的訪問方式,如果是pathinfo的話,只需要把紅色部分如下修改即可
var url="doLog"; $.post(url,{"staffname":$staffname,"staffpwd":$staffpwd,"verifycode":$verifycode},function(data){ if(data=="codeerr"){ alert("驗(yàn)證碼錯(cuò)誤!"); }else if(data=="authempty"){ alert("請輸入用戶名或密碼!") }else if(data=="autherr"){ alert("用戶名或密碼錯(cuò)誤!"); }else if(data=="success"){ alert("登錄成功!"); location.href="../Index/index"; //跳轉(zhuǎn)首頁,訪問其他模塊的方法
2.下載文件的時(shí)候,總是莫名多出許多html的東西,原因是緩沖區(qū)沒有清空,可以通過以下代碼進(jìn)行修改,不過這種方式實(shí)際上是下載的仍然是html格式的文件,只不過改了一下后綴名為xls而已,因而用excel打開的時(shí)候會提示格式問題,忽略即可。同時(shí)需要注意使用 icov()函數(shù)轉(zhuǎn)換編碼,因?yàn)閤ls默認(rèn)編碼格式并非utf-8.
ob_start(); ob_end_clean(); Header( "Content-type: application/octet-stream"); Header( "Accept-Ranges: bytes "); Header( "Content-type:application/vnd.ms-excel;charset=gb2312"); Header( "Content-Disposition:attachment;filename={$filename}.xls");
3.在刪除文件時(shí)會遇到路徑問題,因?yàn)轫?xiàng)目中使用的較多的是相對路徑,即相對入口文件而言,但是刪除文件則需要使用絕對路徑,我并沒有找到合適的解決方法,只好用了比較保守的方式
$path="./Public/uploads/";
$path=str_replace("<a target="_blank" href="file:///" style="color:rgb(51,119,170); text-decoration:none">\\","/",realpath($path)."/</a>"); //獲取絕對路徑,并轉(zhuǎn)換分隔符
4.在配置nginx和php方面,我使用了fastCGI的方式,將如下代碼保存為cmd文件,直接點(diǎn)擊運(yùn)行就可以了
"F:\php\php-cgi.exe" -b 127.0.0.1:9000 -c "F:\php\php.ini" //后面是php文件的路徑
然后在nginx的配置文件里加上幾句話
location ~ \.php/?.* { root myapplications; fastcgi_pass 127.0.0.1:9000; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; include fastcgi_params; #定義變量 $path_info ,用于存放pathinfo信息 set $path_info ""; #定義變量 $real_script_name,用于存放真實(shí)地址 set $real_script_name $fastcgi_script_name; #如果地址與引號內(nèi)的正則表達(dá)式匹配 if ($fastcgi_script_name ~ "^(.+?\.php)(/.+)$") { #將文件地址賦值給變量 $real_script_name set $real_script_name $1; #將文件地址后的參數(shù)賦值給變量 $path_info set $path_info $2; } #配置fastcgi的一些參數(shù) fastcgi_param SCRIPT_FILENAME $document_root$real_script_name; fastcgi_param SCRIPT_NAME $real_script_name; fastcgi_param PATH_INFO $path_info; }
以上內(nèi)容是針對在Nginx上部署ThinkPHP,解決Pathinfo問題,希望能夠幫助到大家。
相關(guān)文章
PHP常見數(shù)學(xué)函數(shù)及BC高精度數(shù)學(xué)函數(shù)用法示例
這篇文章主要介紹了PHP常見數(shù)學(xué)函數(shù)及BC高精度數(shù)學(xué)函數(shù)用法,簡單列舉了php常見數(shù)學(xué)運(yùn)算函數(shù)并結(jié)合實(shí)例形式給出了bc高精度函數(shù)的功能與使用技巧,需要的朋友可以參考下2017-11-11PHP嚴(yán)重致命錯(cuò)誤處理:php Fatal error: Cannot redeclare class or funct
這篇文章主要介紹了PHP嚴(yán)重致命錯(cuò)誤處理:php Fatal error: Cannot redeclare class or function,需要的朋友可以參考下2017-02-02php自動(dòng)識別文字編碼并轉(zhuǎn)換為目標(biāo)編碼的方法
這篇文章主要介紹了php自動(dòng)識別文字編碼并轉(zhuǎn)換為目標(biāo)編碼的方法,涉及php針對當(dāng)前編碼的判斷與對應(yīng)的編碼轉(zhuǎn)換實(shí)現(xiàn)技巧,需要的朋友可以參考下2015-08-08php中$_SERVER[PHP_SELF] 和 $_SERVER[SCRIPT_NAME]之間的區(qū)別
php中$_SERVER[PHP_SELF] 和 $_SERVER[SCRIPT_NAME]之間的區(qū)別2009-09-09PHP開發(fā)工具ZendStudio下Xdebug工具使用說明詳解
我使用的是XAMPP的集成開發(fā)平臺環(huán)境。里面已經(jīng)預(yù)設(shè)了Xdebug的調(diào)試工具,只需要自己改下配置的就可以了2013-11-11PHP面向?qū)ο蟪绦蛟O(shè)計(jì)(OOP)之方法重寫(override)操作示例
這篇文章主要介紹了PHP面向?qū)ο蟪绦蛟O(shè)計(jì)(OOP)之方法重寫(override)操作,簡單描述了php面向?qū)ο蟪绦蛟O(shè)計(jì)中方法重寫的原理,并結(jié)合實(shí)例形式分析了php方法重寫相關(guān)實(shí)現(xiàn)技巧與注意事項(xiàng),需要的朋友可以參考下2018-12-12windows服務(wù)器使用IIS時(shí)thinkphp搜索中文無效問題
在用ThinkPHP開發(fā)的網(wǎng)站,在linux服務(wù)器下使用過一段時(shí)間,一切正常。但是更換到windows服務(wù)器時(shí),發(fā)現(xiàn)搜索的時(shí)候,無法搜索中文,查不出相應(yīng)的結(jié)果。查看數(shù)據(jù)庫發(fā)現(xiàn)數(shù)據(jù)是存在的。linux服務(wù)器下正常,而且搜索數(shù)字或字母程序正常,說明程序是沒有任何問題的。2023-06-06