路由:訪問項目中具體某個方法的URL地址,簡單理解就是URL地址
在thinkphp里系統提供了4種路由形式(之前的路由形式:index.php?p=平臺&c=控制器&a=方法;pca)
總結:pca為平臺、控制器、方法;thinkPHP里mca為分組、控制器、方法
①普通形式路由;
立即學習“PHP免費學習筆記(深入)”;
②Pathinfo形式路由;
③Rewrite形式路由;
④兼容形式路由
下面詳解
(1)普通形式路由
也叫get形式路由,所有信息通過get傳遞
路由形式:http://網址/入口文件(index.php)?m=分組&c=控制器名&a=方法&參數名=參數值
例如:訪問Home分組下的User控制器中的test方法,并傳遞一個參數id=1
http://www.1336.com/index.php?m=Home&c=User&a=test&id=1
可以通過$_GET[‘id’]來驗證,輸出1。所以驗證成功
缺點:url傳遞的東西都會顯示出來,既不安全也不好看。所以用的不多
(2)pathinfo()形式路由(thinkPHP的默認路由)
路由形式:http://網址/入口文件(index.php)/分組名/控制器名/方法/參數名1/參數值1/參數名n/參數值n
http://www.1336.com/index.php/Home/User/test/id/100
方法里有$_GET[‘id’],輸出100。所以驗證成功
(3)rewrite路由形式(重寫)
路由形式:http://網址/分組名/控制器名/方法名/參數1/參數值1/參數n/參數值n
與thinkPHP默認的路由形式Pathinfo()形式路由的不同之處就是,缺少了入口文件
注意:該路由形式不能直接使用,需要配置完成才能使用
配置步驟:
1. 配置Apache下的httpd.conf,開啟擴展rewrite重寫模塊;
2. 修改虛擬主機配置文件,文件位于Apache目錄下,conf/extra/httpd-vhosts,加上允許重寫配置。表示允許重寫當前站點
簡單說就是給需要開啟重寫的站點,目錄配置處添加Allowoverride:all
#針對目錄的詳細配置 ????<directory> ????????#允許所有訪問 ????????allow?from?all ????????#允許重寫 ????????AllowOverride?all ????????#表示允許站點顯示文件目錄結構 ????????Options?+indexes ????</directory>
3. 重啟Apache
4. 將ThinkPHP壓縮包中的.htaccess文件復制到入口文件的同級目錄
配置完成后輸入網址驗證,這里還用上面pathinfo的網址,去掉入口文件后刷新,發現輸出100。OK~配置完成
拓展:
PHP的運行模式(5大運行模式):
CGI模式(通用網關接口);
FastCGI模式(常駐型CGI);
CLI(命令行運行);
Web模塊模式(Apache等Web服務器運行的模式);
ISAPI模式(5.3版本后不再支持)
現在用的環境集成包的模式為Web模塊模式,工作開發中常用FastCGI常駐型模式。
綜上,rewrite模式需要Apache支持,一般不推薦使用。除了Apache外服務器軟件還有nginx,lightd等。
(4)兼容路由形式
兼容路由形式結合了普通路由形式、pathinfo路由形式、rewrite路由形式特征
路由形式:http://網址/入口文件?s=/分組名/控制器名/方法名/參數1/參數值1
注意:兼容路由形式只有1個參數:參數名s,后面可以看做s參數值
例如:http://www.1336.com/index.php?s=/Home/User/test/id/100,驗證輸出100,說明訪問成功
(5)拓展:ThinkPHP中路由形式的配置
配置文件ThinkPHP/Conf/convention.php,ThinkPHP慣例配置文件
/*?URL設置?*/ 'URL_CASE_INSENSITIVE'??=>??true,???//?默認false?表示URL區分大小寫?true則表示不區分大小寫 'URL_MODEL'?????????????=>??1,
URL訪問模式,可選參數0、1、2、3,代表以下四種模式:
0 (普通模式);?
1 (Pathinfo 模式);?
2 (REWRITE? 模式);?
3 (兼容模式)? 默認為Pathinfo 模式
注意:路由形式的配置值,不影響地址欄中輸入其他形式路由訪問。該配置項的值,影響的是ThinkPHP系統封裝的URL組裝函數(U函數)生成url地址的形式
ThinkPHP支持四種URL模式,可以通過設置URL_MODEL參數來定義,包括普通模式、PATHINFO、REWRITE和兼容模式。
1、普通模式:’URL_MODEL’=>0,
http://serverName/appName/?m=module&a=action&id=1
2、PATHINFO模式:’URL_MODEL’=>1,(系統默認的模式)
默認使用URL_PATHINFO模式,PATHINFO模式還包括普通模式和智能模式兩種:
PATHINFO普通模式:’PATH_MODEL’=>1,
該模式URL參數沒有順序,例如
http://serverName/appName/m/module/a/action/id/1 http://serverName/appName/a/action/id/1/m/module
PATHINFO智能模式:’PATH_MODEL’=>2, (系統默認的模式)
該模式自動識別模塊和操作,例如
http://serverName/appName/module/action/id/1/ http://serverName/appName/module,action,id,1/
智能模式下,第一個參數會被解析成模塊名稱(或者路由名稱,下面會有描述),第二個參數會被解析成操作(在第一個參數不是路由名稱的前提下),后面的參數是顯式傳遞的,而且必須成對出現,例如:
http://serverName/appName/module/action/year/2000/month/01/day/01/
其中參數之間的分割符由PATH_DEPR參數設置,默認為”/”,若設置PATH_DEPR為”^”,則:
http://serverName/appName/module^action^id^1/
注意不要使用”@” 和”&”符號進行分割,該符號有特殊用途,可能會導致其他的沖突。
如果想要簡化URL的形式可以通過路由功能(后面會有描述),在PATHINFO模式下,會把相關參數轉換成GET變量,以及并入REQUEST變量,因此不妨礙應用里面的以上變量獲取。
3、REWRITE模式:’URL_MODEL’=>2,
該URL模式和PATHINFO模式功能一樣,除了可以不需要在URL里面寫入口文件,和可以定義.htaccess 文件外。
例如,我們可以增加如下的.htaccess內容把所有操作都指向index.php文件。
RewriteEngine?on RewriteCond?%{REQUEST_FILENAME}?!-d RewriteCond?%{REQUEST_FILENAME}?!-f RewriteRule?^(.*)$?index.php/$1?[QSA,PT,L]
4、兼容模式:’URL_MODEL’=>3
兼容模式是普通模式和PATHINFO模式的結合,并且可以讓應用在需要的時候直接切換到PATHINFO模式而不需要更改模板和程序,基本上可以支持任何的運行環境。
只需要傳入PATHINFO 兼容模式獲取變量VAR_PATHINFO,默認值為s,例如
http://serverName/appName/?s=/module/action/id/1/
會執行和上面的URL等效的操作,并且也可以支持參數分割符號的定義,例如在PATH_DEPR設置為”~”的情況下,下面的URL有效:
http://serverName/appName/?s=module~action~id~1
兼容模式的情況下面模板文件不用做任何更改,保持和PATHINFO模式的寫法一樣,只需要在切換URL模式的時候清空下模板緩存目錄。
推薦教程:《TP5》