thinkphp四種url模式介紹

thinkphp四種url模式介紹

路由:訪問項目中具體某個方法的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'??=&gt;??true,???//?默認false?表示URL區分大小寫?true則表示不區分大小寫 'URL_MODEL'?????????????=&gt;??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&amp;a=action&amp;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

以上就是

? 版權聲明
THE END
喜歡就支持一下吧
點贊15 分享