当前位置:首页 > PHP教程 > php高级应用 > 列表

php实现简单路由实现伪静态

发布:smiling 来源: PHP粉丝网  添加日期:2024-09-26 20:47:18 浏览: 评论:0 

这篇文章主要为大家详细介绍了php如何实现简单路由实现伪静态,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下。

伪静态作用

增强搜索引擎的友好性:通过改变动态的网页的URL,使之看起来像静态网页,伪静态技术有助于提高网站在搜索引擎中的表现,使网站内容更易被搜索引擎抓取和索引。

提升用户信任度和体验:伪静态的URL后缀方式与静态网页相似,这有助于提升用户对网站的信任度。同时,伪静态技术也能改善用户对网站的整体体验,因为静态URL通常看起来更加整洁和专业。

缓解服务器负担:伪静态技术通过减少服务器响应请求的次数,可以有效减轻服务器的负担,特别是在高并发访问的情况下。

提高关键词排名:在某些搜索引擎中,伪静态技术可以通过提高关键词的相关性来提升网站的排名。例如,谷歌会以特殊方式展示与搜索关键词高度相关的网站,从而提高这些网站的点击率。

具体实现

将?后面的参数转化为不带?的url地址

将参数值放到地址上

将参数名放到路由上

尽量将url后缀变为.html

参数识别

通过服务器软件url重写统一入口

通过统一路由处理函数将地址及路由参数变为普通带?的地址

通过统一路由处理函数将参数添加进系统变量

通过统一路由处理函数确定要执行的文件

require要执行的文件

配合统一入口加命名空间简直完美

缓存

为统一路由处理函数得到的普通带?的地址添加id

require要执行的文件用ob处理得到结果及文件类型写入缓存文件

通过id获取缓存文件,没有缓存则ob require

一点代码

路由处理 //只针对get请求 string类型参数

路由定义

  1. <?php 
  2.  
  3. define('route',[ 
  4.  
  5.     [ 
  6.  
  7.         '/detail/{$id}.html', 
  8.  
  9.         '/detail.php' 
  10.  
  11.     ], 
  12.  
  13.     [ 
  14.  
  15.         '/detail/{$id}/{$key}.html', 
  16.  
  17.         '/detail.php' 
  18.  
  19.     ], 
  20.  
  21.   
  22.  
  23. ]); 

路由处理 //将参数添加进$_GET

  1. <?php 
  2.  
  3. namespace ppt\core; 
  4.  
  5.   
  6.  
  7. class Route 
  8.  
  9. { 
  10.  
  11.     public static function addRouteParam($s) 
  12.  
  13.     { 
  14.  
  15.         $url = $s; 
  16.  
  17.         $params = []; 
  18.  
  19.         $route_params = []; 
  20.  
  21.         $route_param_keys = []; 
  22.  
  23.         $route_param_values = []; 
  24.  
  25.         foreach (route as $item){ 
  26.  
  27.             $route_tmp = preg_replace('/\{\$[\w]+\}/','[\w]+',$item[0]); 
  28.  
  29.             $route_tmp = str_replace(['/','.'],['\/','\.'],$route_tmp); 
  30.  
  31.             if(preg_match('/^'.$route_tmp.'(\?[\s\S]+)?$/i',$s)){ 
  32.  
  33.                 preg_match_all('/\{\$[\w]+\}/',$item[0],$route_param_keys); 
  34.  
  35.                 if(!emptyempty($route_param_keys)){ 
  36.  
  37.                     $route_param_keys = str_replace(['{','$','}'],'',$route_param_keys[0]); 
  38.  
  39.                     preg_match_all('/[\w]+/',$s,$route_param_values); 
  40.  
  41.                     if(emptyempty($route_param_values)){ 
  42.  
  43.                         break; 
  44.  
  45.                     } 
  46.  
  47.                     if(strpos($s,'?')!==false){ 
  48.  
  49.                         if(!emptyempty(parse_url($s)['query'])){ 
  50.  
  51.                             parse_str(parse_url($s, PHP_URL_QUERY), $params); 
  52.  
  53.                         } 
  54.  
  55.                     } 
  56.  
  57.                     $route_param_values = $route_param_values[0]; 
  58.  
  59.                     $file = $item[1]; 
  60.  
  61.                     array_unshift($route_param_keys,'file'); 
  62.  
  63.                     for($i=1;$i<count($route_param_keys);$i++){ 
  64.  
  65.                         $route_params[$route_param_keys[$i]] = $route_param_values[$i]; 
  66.  
  67.                     } 
  68.  
  69.                     $params = array_merge($params,$route_params); 
  70.  
  71.                     $url = $file.'?'.http_build_query($params); 
  72.  
  73.                 } 
  74.  
  75.                 break; 
  76.  
  77.             } 
  78.  
  79.         } 
  80.  
  81.         return $url; 
  82.  
  83.     } 
  84.  
  85. } 

参数提取及调用执行文件

  1. public static function run($s) 
  2.  
  3.     { 
  4.  
  5.         $_ppt_file = app.'/code'.parse_url($s)['path']; 
  6.  
  7.         if(preg_match('/\/$/',$_ppt_file)) { 
  8.  
  9.             $_ppt_file.='index.php'; 
  10.  
  11.         } 
  12.  
  13.   
  14.  
  15.         if(strpos($s,'?')!==false){ 
  16.  
  17.             if(!emptyempty(parse_url($s)['query'])){ 
  18.  
  19.                 parse_str(parse_url($s, PHP_URL_QUERY), $_params); 
  20.  
  21.                 foreach ($_params as $_key=>$_item){ 
  22.  
  23.                     $_GET[$_key] = $_item; 
  24.  
  25.                 } 
  26.  
  27.             } 
  28.  
  29.         } 
  30.  
  31.   
  32.  
  33.         if(!is_file($_ppt_file)) 
  34.  
  35.             http_code_404(); 
  36.  
  37.         require $_ppt_file; 
  38.  
  39.     } 

后续思考

如此这般php的作用变为生成及控制静态文件

最优秀的伪静态就是静态,故怎样用php实现没有php?

Tags: php路由伪静态 php伪静态

分享到: