tp5訪問入口文件的時候是,訪問public目錄下的index.php,那麼她真正訪問的url究竟是什麼?如何去訪問其餘頁面,實際上她默認使用的PATH_INFO模式進行訪問。php
PATHINFO模式html
想一想在我使用tp3.2的時候,也是利用的path_info去訪問,再往前剛接觸的php的時候,咱們寫的php腳本訪問的時候就是按照文件位置去訪問的對應url,例如http://localhost/test/a/b/c.php,確實這種就是普通的路由訪問,直接按照url去找你對應文件夾下的php而後執行。linux
那麼pathinfo的模式, 其url的路徑實際並不存在,apache或者nginx等經過必定的手段將不存在的路徑nginx
保存在$_SERVER['PATH_INFO']環境變量裏面,舉個例子http://localhost/path_info.php/index/index/index.html?id=1;thinkphp
那麼在path_info.php裏面我就只寫了一個例子apache
<?php echo $_SERVER['PATH_INFO']; ?>
會輸出服務器
/index/index/index.htmlapp
這一段就是pathinfo模式,去訪問不存在的路徑,會存在一個環境變量$_SERVER['PATH_INFO'],後面的id=1做爲$_GET['id']傳入頁面。thinkphp5
pathinfo的兩種模式
訪問\application\index\controller\index.php的test方法,下面這兩種模式是相等的url
一、http://localhost/index.php?m=Index&a=test
二、http://localhost/index.php/Index/test
四種路徑訪問模式
在config目錄下邊來作修改 URL_MODEL的值,分別表述以下:
一、值爲0 叫作普通模式。如:http://localhost/index.php?m=模塊&a=方法
二、值爲1 叫作pathinfo模式。如:http://localhost/index.php/模塊/方法
三、值爲2 叫作rewrite重寫(僞靜態) 能夠本身寫相關的rewrite規則,也可使用系統爲咱們提供的rewrite規則隱藏掉index.php,生成:http://localhost/模塊/方法
四、值爲3 叫作兼容模式。當服務器上面不支持pathinfo模式的時候,可是你又在以前的路徑訪問格式上面,所有用的是pathinfo格式。那麼它會提示你路徑格式不正確。那麼,你就能夠用標號爲3的兼容模式來處理。他的路徑訪問相似於http://localhost/index.php?s=模塊/方法
TP5默認path_info模式
好吧,轉到正題上,那麼tp5的url是怎麼弄的?
實際上tp就是根據PATHINFO,從裏面提取到模塊名,控制器名,操做方法名,將剩餘的部分轉換成爲$_GET。
URL大小寫問題
最後,再看一下這個讓人迷惑的地方,不少時候報錯就是你的url訪問找不到你的控制器類
tp5默認url不區分大小寫,url裏面的模塊/控制器/操做名會自動轉化大小寫,控制器在最後調用的時候會轉化爲駝峯法處理
下面我關閉url轉化控制器和操做名,來訪問
順道看一下日誌吧
位置:(D:\wamp\www\Tp5\runtime\log\)
日誌在項目開發的時候仍是很重要的,看看日誌也能幫助理解
小結
[1]thinkphp5默認使用pathinfo模式來解析url進行訪問
[2]模塊目錄小寫,控制器名和類名一致採用大駝峯,後綴是.php,操做方法採用小駝峯書寫
[3]我建議關閉「是否自動轉換URL中的控制器和操做名」,也就是config.php配置文件裏面url_convert設置爲false,大小寫嚴格一些,方便之後上線在linux運行
[4]永遠記住,日誌很重要
原文連接:https://blog.csdn.net/Tacks/article/details/85121188