tp5訪問入口文件的時候是,訪問public目錄下的index.php,那么她真正訪問的url到底是什么?如何去訪問其他頁面,實際上她默認使用的PATH_INFO模式進行訪問。
PATHINFO模式
想想在我使用tp3.2的時候,也是利用的path_info去訪問,再往前剛接觸的php的時候,我們寫的php腳本訪問的時候就是按照文件位置去訪問的對應url,例如http://localhost/test/a/b/c.php,確實這種就是普通的路由訪問,直接按照url去找你對應文件夾下的php然后執行。
那么pathinfo的模式, 其url的路徑實際並不存在,apache或者nginx等通過一定的手段將不存在的路徑
保存在$_SERVER['PATH_INFO']環境變量里面,舉個例子http://localhost/path_info.php/index/index/index.html?id=1;
那么在path_info.php里面我就只寫了一個例子
<?php echo $_SERVER['PATH_INFO']; ?>
會輸出
/index/index/index.html
這一段就是pathinfo模式,去訪問不存在的路徑,會存在一個環境變量$_SERVER['PATH_INFO'],后面的id=1作為$_GET['id']傳入頁面。
pathinfo的兩種模式
訪問\application\index\controller\index.php的test方法,下面這兩種模式是相等的
1、http://localhost/index.php?m=Index&a=test
2、http://localhost/index.php/Index/test
四種路徑訪問模式
在config目錄下邊來做修改 URL_MODEL的值,分別表述如下:
1、值為0 叫做普通模式。如:http://localhost/index.php?m=模塊&a=方法
2、值為1 叫做pathinfo模式。如:http://localhost/index.php/模塊/方法
3、值為2 叫做rewrite重寫(偽靜態) 可以自己寫相關的rewrite規則,也可以使用系統為我們提供的rewrite規則隱藏掉index.php,生成:http://localhost/模塊/方法
4、值為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