效果
假設網站域名是A.com,那么可以:
通過
A.com/xwzx.html
訪問
A.com/Home/News/index.html?id=xwzx
或者通過
A.com/xwzx_1.html
訪問
A.com/Home/News/index.html?id=xwzx&p=1
最關鍵的是:
使用
U('Home/News/index', array('id'=>xwzx))
生成
A.com/xwzx.html
鏈接
或者使用
U('Home/News/index', array('id'=>xwzx,'p'=>1))
生成
A.com/xwzx_1.html
鏈接
以此類推
目的
其實ThinkPHP3.2.3的路由部分使用場景并不多,究其原因是因為路由規則可以設置并正常訪問,但是卻沒有自動生成路由的方法。比如說你配置完一個路由規則A.com/xwzx.html是可以正常訪問的,卻發現有大量的鏈接U('Home/News/index', array('id'=>xwzx))需要修改為/xwzx.html,使用的U方法并不能自動完成轉化。
所以我們的目的就是,讓U方法可以根據路由規則反推出偽靜態的鏈接。這樣做有什么好處呢?
- 如果有老項目需要配置全站的偽靜態規則,這樣做可以減少工作量,一切只需要配置即可。
- 在需要發起支付的頁面,通常會帶多個參數,這樣就不利于我們配置支付接口的發起地址,此時用這個方法可以把多個參數合并到同一段URL中。更多支付接口配置內容請參考PHP支付接口教程,詳解微信支付(一)
- 不需要做項目之前就事先處理偽靜態頁面,只需要正常寫U方法即可,加快開發速度。
思路
修改ThinkPHP底層的U方法,當路由規則開啟時,通過規則反推出偽靜態鏈接。
配置規則同ThinkPHP官方的文檔,Application/Common/Conf/config.php配置如下:
'URL_ROUTER_ON' => true, // 開啟URL路由
'URL_ROUTE_RULES' => array(
//'CGIIP/:id/:p'=>'Home/News/index',
'/^([A-Za-z0-9]+)$/'=>'Home/News/index?id=:1',
'/^([A-Za-z0-9]+)_(d+)$/'=>'Home/News/index?id=:1&p=:2',
'4O4'=>'Admin/Index/notFound',
'test'=>'Home/Index/test',
), // 路由規則
修改ThinkPHP/Common/functions.php里面的U方法:
<script src="https://gist.coding.net/u/fourn/60d20945c81645b3b826330896c0fa93.js"></script>
完整functions.php文件代碼在Coding中:
代碼放到U方法中,“if($suffix){”這行代碼之前。
注意這些都是針對ThinkPHP3.2.3版本的哦