php實(shí)現(xiàn)簡(jiǎn)單路由實(shí)現(xiàn)偽靜態(tài)
偽靜態(tài)作用
增強(qiáng)搜索引擎的友好性:通過(guò)改變動(dòng)態(tài)的網(wǎng)頁(yè)的URL,使之看起來(lái)像靜態(tài)網(wǎng)頁(yè),偽靜態(tài)技術(shù)有助于提高網(wǎng)站在搜索引擎中的表現(xiàn),使網(wǎng)站內(nèi)容更易被搜索引擎抓取和索引。
提升用戶信任度和體驗(yàn):偽靜態(tài)的URL后綴方式與靜態(tài)網(wǎng)頁(yè)相似,這有助于提升用戶對(duì)網(wǎng)站的信任度。同時(shí),偽靜態(tài)技術(shù)也能改善用戶對(duì)網(wǎng)站的整體體驗(yàn),因?yàn)殪o態(tài)URL通??雌饋?lái)更加整潔和專(zhuān)業(yè)。
緩解服務(wù)器負(fù)擔(dān):偽靜態(tài)技術(shù)通過(guò)減少服務(wù)器響應(yīng)請(qǐng)求的次數(shù),可以有效減輕服務(wù)器的負(fù)擔(dān),特別是在高并發(fā)訪問(wèn)的情況下。
提高關(guān)鍵詞排名:在某些搜索引擎中,偽靜態(tài)技術(shù)可以通過(guò)提高關(guān)鍵詞的相關(guān)性來(lái)提升網(wǎng)站的排名。例如,谷歌會(huì)以特殊方式展示與搜索關(guān)鍵詞高度相關(guān)的網(wǎng)站,從而提高這些網(wǎng)站的點(diǎn)擊率。
具體實(shí)現(xiàn)
將?后面的參數(shù)轉(zhuǎn)化為不帶?的url地址
- 將參數(shù)值放到地址上
- 將參數(shù)名放到路由上
- 盡量將url后綴變?yōu)?html
參數(shù)識(shí)別
- 通過(guò)服務(wù)器軟件url重寫(xiě)統(tǒng)一入口
- 通過(guò)統(tǒng)一路由處理函數(shù)將地址及路由參數(shù)變?yōu)槠胀◣?的地址
- 通過(guò)統(tǒng)一路由處理函數(shù)將參數(shù)添加進(jìn)系統(tǒng)變量
- 通過(guò)統(tǒng)一路由處理函數(shù)確定要執(zhí)行的文件
- require要執(zhí)行的文件
- 配合統(tǒng)一入口加命名空間簡(jiǎn)直完美
緩存
- 為統(tǒng)一路由處理函數(shù)得到的普通帶?的地址添加id
- require要執(zhí)行的文件用ob處理得到結(jié)果及文件類(lèi)型寫(xiě)入緩存文件
- 通過(guò)id獲取緩存文件,沒(méi)有緩存則ob require
一點(diǎn)代碼
路由處理 //只針對(duì)get請(qǐng)求 string類(lèi)型參數(shù)
路由定義
<?php define('route',[ [ '/detail/{$id}.html', '/detail.php' ], [ '/detail/{$id}/{$key}.html', '/detail.php' ], ]);
路由處理 //將參數(shù)添加進(jìn)$_GET
<?php namespace ppt\core; class Route { public static function addRouteParam($s) { $url = $s; $params = []; $route_params = []; $route_param_keys = []; $route_param_values = []; foreach (route as $item){ $route_tmp = preg_replace('/\{\$[\w]+\}/','[\w]+',$item[0]); $route_tmp = str_replace(['/','.'],['\/','\.'],$route_tmp); if(preg_match('/^'.$route_tmp.'(\?[\s\S]+)?$/i',$s)){ preg_match_all('/\{\$[\w]+\}/',$item[0],$route_param_keys); if(!empty($route_param_keys)){ $route_param_keys = str_replace(['{','$','}'],'',$route_param_keys[0]); preg_match_all('/[\w]+/',$s,$route_param_values); if(empty($route_param_values)){ break; } if(strpos($s,'?')!==false){ if(!empty(parse_url($s)['query'])){ parse_str(parse_url($s, PHP_URL_QUERY), $params); } } $route_param_values = $route_param_values[0]; $file = $item[1]; array_unshift($route_param_keys,'file'); for($i=1;$i<count($route_param_keys);$i++){ $route_params[$route_param_keys[$i]] = $route_param_values[$i]; } $params = array_merge($params,$route_params); $url = $file.'?'.http_build_query($params); } break; } } return $url; } }
參數(shù)提取及調(diào)用執(zhí)行文件
public static function run($s) { $_ppt_file = app.'/code'.parse_url($s)['path']; if(preg_match('/\/$/',$_ppt_file)) { $_ppt_file.='index.php'; } if(strpos($s,'?')!==false){ if(!empty(parse_url($s)['query'])){ parse_str(parse_url($s, PHP_URL_QUERY), $_params); foreach ($_params as $_key=>$_item){ $_GET[$_key] = $_item; } } } if(!is_file($_ppt_file)) http_code_404(); require $_ppt_file; }
后續(xù)思考
如此這般php的作用變?yōu)樯杉翱刂旗o態(tài)文件
最優(yōu)秀的偽靜態(tài)就是靜態(tài),故怎樣用php實(shí)現(xiàn)沒(méi)有php?
到此這篇關(guān)于php實(shí)現(xiàn)簡(jiǎn)單路由實(shí)現(xiàn)偽靜態(tài)的文章就介紹到這了,更多相關(guān)php偽靜態(tài)內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
php下關(guān)于Cannot use a scalar value as an array的解決辦法
已經(jīng)定義過(guò)的一個(gè)布爾型變量在下面被我直接當(dāng)數(shù)組來(lái)調(diào)用了,所以就出現(xiàn)錯(cuò)誤了2010-08-08ThinkPHP、Zend?Framework2、Yaf、Laravel框架路由大比拼
這篇文章主要介紹了ThinkPHP、Zend?Framework2、Yaf、Laravel框架路由大比拼的相關(guān)資料,需要的朋友可以參考下2015-03-03php通過(guò)array_merge()函數(shù)合并兩個(gè)數(shù)組的方法
這篇文章主要介紹了php通過(guò)array_merge()函數(shù)合并兩個(gè)數(shù)組的方法,實(shí)例分析了php中array_merge()函數(shù)合并數(shù)組的使用技巧,需要的朋友可以參考下2015-03-03php與flash as3 socket通信傳送文件實(shí)現(xiàn)代碼
這篇文章主要介紹了php與flash as3 socket通信傳送文件實(shí)現(xiàn)代碼,本文含AS3代碼和PHP代碼,需要的朋友可以參考下2014-08-08Ext.data.PagingMemoryProxy分頁(yè)一次性讀取數(shù)據(jù)的實(shí)現(xiàn)代碼
Ext.data.PagingMemoryProxy分頁(yè)一次性讀取數(shù)據(jù)的實(shí)現(xiàn)代碼,需要的朋友可以參考下。2010-04-04