TP中的四種url訪問方式


什么是PATHINFO:就是http://localhost/index.php/Home/Index/index/a/1/b/2?c=3中的紅色部分,

注意c=3並不是pathinfo的一部分,它是一個query參數。

pathinfo值得是URL的路徑實際上不存在的時候,apache或者Nginx等通過一定的手段將不存在的路徑,都是實際

不存在路徑保存到環境變量$_SERVER['PATH_INFO']中。也可以將它轉化為$_GET['s']參數,TP也可以識別。

也就是說當你訪問TP項目的時候,你實際上訪問的只是入口文件index.php,不管你后面有多長的路徑,都是實際不存在的,

轉換成PATHINFO或$_GET['s']了而已。

那么THINKPHP就是根據PATHINFO,從中提取出 分組名,模塊名 ,方法名 , 以及將剩余的部分轉換成為$_GET

變量,比如TP從PATHINFO字符串中提取'Home'字段串,將其保持到

$_GET['g'] , $_GET['m']='Index' ;$_GET['a']='index' ;$_GET['b']=2.可以dump('$_GET')看看。

關於URL詳細的解析流程,請看 ThinkPHP/Lib/Core/Dispatcher.class.php 核心類。

 

URL路由:

URL路由--Url Router,指的是,在TP進行常規url解析之前,先檢測路由,如果發現有路由規則匹配當前的PATHINFO,那么URL解析則交給路由處理。

路由規則是由多條 rule=>router 規則組成的數組。(規則 =>路由器)

路由處理過程大概如下:

1.遍歷路由規則rule,與當前PATHINFO字符串進行匹配,如果合法,則從PATHINFO中取出所需要的字符串。

2.路由中每條規則對應一個router,router中指定對應的模塊以及方法,模塊和方法可以用第1步中匹配到的字符串進行動態替代。

3.將剩余的參數都解析並寫入到$_GET中。

 

-------------------------------------------------------------------------------------------------------------------------------------

url的4種訪問方式    (這是重點!!)

1.PATHINFO 模式 --重點 在后面使用非常多,如果想傳多個參數可以使用鍵1/值1/鍵2/值2方法

代碼如下:
http://域名/項目名/入口文件/模塊名/方法名/鍵1/值1/鍵2/值2

 

 

2.普通模式也稱為重寫模式

代碼如下:
http://域名/項目名/入口文件?m=模塊名&a=方法名&鍵1=值1&鍵2=值2

 

 

3.REWRITE重寫模式,去掉入口文件便於SEO優化

代碼如下:
http://域名/項目名/模塊名/方法名/鍵1/值1/鍵2/值2

 

 

4.兼容模式

代碼如下:
http://域名/項目名/入口文件?s=模塊名/方法名/鍵1/值1/鍵2/值2

 

如何修改PATHINFO地址中的/改成-在Home/Conf/config.php中

代碼如下:
'URL_PATHINFO_DEPR'=>'-',//修改RUL的分隔符,把地址欄的參數部分/換成:http://域名/項目名/入口文件/模塊名-方法名-鍵1-值1-鍵2-值2

 

 

在index.php中開啟調用模式,為了在后產模式中不讓文件緩存影響開發

代碼如下:
define('APP_DEBUG',ture);//如果設置為ture不緩存文件,false則緩存文件

 

 

REWRITE模式開啟方法

在httpd.conf中查找rewrite_module modules/mod_rewrite.sl 把#去掉重啟服務,在入口文件下新建.htaccess.php,重寫文件是去掉index.php的意思:

代碼如下:
RewriteEngine on  
RewriteCond %{REQUEST_FILENAME} !-d  
RewriteCond %{REQUEST_FILENAME} !-f  
RewriteRule ^(.*)$ index.php/$1 [QSA,PT,L]
 
路由處理過程大概如下:

1.遍歷路由規則rule,與當前PATHINFO字符串進行匹配,如果合法,則從PATHINFO中取出所需要的字符串。 2.路由中每條規則對應一個router,router中指定對應的模塊以及方法,模塊和方法可以用第1步中匹配到的字符串進行動態替代。 3.將剩余的參數都解析並寫入到$_GET中。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM