php简单路由实现伪静态

#伪静态作用#

  • 增强搜索引擎的友好性:通过改变动态网页的URL,使之看起来像静态网页,伪静态技术有助于提高网站在搜索引擎中的表现,使网站内容更易被搜索引擎抓取和索引。
  • 提升用户信任度和体验:伪静态的URL后缀方式与静态网页相似,这有助于提升用户对网站的信任度。同时,伪静态技术也能改善用户对网站的整体体验,因为静态URL通常看起来更加整洁和专业。
  • 缓解服务器负担:伪静态技术通过减少服务器响应请求的次数,可以有效减轻服务器的负担,特别是在高并发访问的情况下。
  • 提高关键词排名:在某些搜索引擎中,伪静态技术可以通过提高关键词的相关性来提升网站的排名。例如,谷歌会以特殊方式展示与搜索关键词高度相关的网站,从而提高这些网站的点击率。

具体实现

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

  • 将参数值放到地址上
  • 将参数名放到路由上
  • 尽量将url后缀变为.html

参数识别

  • 通过服务器软件url重写统一入口
  • 通过统一路由处理函数将地址及路由参数变为普通带?的地址
  • 通过统一路由处理函数将参数添加进系统变量
  • 通过统一路由处理函数确定要执行的文件
  • require要执行的文件
  • 配合统一入口加命名空间简直完美

缓存

  • 为统一路由处理函数得到的普通带?的地址添加id
  • require要执行的文件用ob处理得到结果及文件类型写入缓存文件
  • 通过id获取缓存文件,没有缓存则ob require

一点代码

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

路由定义

<?php
define('route',[
    [
        '/detail/{$id}.html',
        '/detail.php'
    ],
    [
        '/detail/{$id}/{$key}.html',
        '/detail.php'
    ],

]);

路由处理 //将参数添加进$_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;
    }
}

 参数提取及调用执行文件

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;
    }

后续思考

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

最完美的哼(ˉ(∞)ˉ)唧是没有痕迹,最优秀的伪静态就是静态,故怎样用php实现没有php?

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/553973.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

OpenMesh 网格平均曲率计算

文章目录 一、简介二、实现代码三、实现效果参考资料一、简介 根据 Laplace-Beltrami 算子与平均曲率法向的关系: 又根据余切 Laplace-Beltrami 算子的定义: 其中 Ai 为该点邻域面积,取 Voronoi cell 面积如下: 得到

软件开发服务合同(Word原件获取2024)

一、合作方式 二、合同标的 三、开发进度及软件成果交付 四、开发费用 五、付款结算方式 六、知识产权条款 七、双方的权利和义务 八、验收 九、售后服务支持 十、培训 十一、保密责任 十二、不可抗力 十三、争议的解决 十四、其它事项 软件开发全套资料获取&#xff1a;软件开…

算法部署 | 使用ggml+C++部署Vision-Transformer算法_无依赖+轻量化+4bit+5bit+8bit量化

项目应用场景 面向 ViT 算法部署场景&#xff0c;项目采用 ggml 推理框架 Cpp 来实现&#xff0c;支持低比特量化&#xff0c;如 4bit 量化、5bit 量化、8bit 量化。算法部署平台包括通用 CPU、AMD CPU 等。 项目效果 项目细节 > 具体参见项目 README.md (1) 模型转换&…

亿级流量系统多级缓存架构9 -分布式事务 2

亿级流量系统多级缓存架构 -分布式事务 2 刚性事物和柔性事物 刚性事务&#xff1a;遵循ACID原则&#xff0c;强一致性。柔性事务&#xff1a;遵循BASE理论&#xff0c;最终一致性 分布式事务解决方案 XA两阶段提交方案 数据库实现xa协议&#xff0c;保证事务&#xff0c;…

IDEA plugins 好用的插件集

IDEA plugins RestfulToolkit 1. 安装插件 File–>Settings --> plugins --> RestfulToolkit 2.插件有点&#xff1a; 2.1、帮助把项目中的 RestURL 按照项目汇总出来&#xff0c;找到对应URL直接在IDEA上面进行请求测试。 2.2、开发Java Web页面项目&#xff0c;经…

Postman之页面简介 V9.31.0

Postman之页面简介 V9.31.0 一、顶部栏二、左部栏三、中部栏四、下部栏 一、顶部栏 &#xff08;1&#xff09;new选项框&#xff0c;生成新建请求、集合、环境等 &#xff08;2&#xff09;import选项框&#xff0c;可以导入文件、文件夹、链接、文本信息等 &#xff08;3&…

【devops】 阿里云挂载云盘 | 扩展系统硬盘 | 不重启服务器增加硬盘容量

扩容分区和文件系统&#xff08;Linux&#xff09; 文档地址 https://help.aliyun.com/zh/ecs/user-guide/extend-the-partitions-and-file-systems-of-disks-on-a-linux-instance?spm5176.smartservice_service_robot_chat_new.help.dexternal.4ac4f625Ol66kL#50541782adxmp…

12.基础乐理-半音、全音

音是有高有底的&#xff0c;音的震动频率越高、音的赫兹越高&#xff0c;我们就说这个音越高&#xff0c;钢琴从左到右&#xff0c;音是逐渐变高的&#xff0c;因变高&#xff0c;它的频率&#xff0c;Hz数是在增加的&#xff0c;如下图&#xff1a; 但是赫兹它动不动就是几百几…

计算机视觉——手机目标检测数据集

这是一个手机目标检测的数据集&#xff0c;数据集的标注工具是labelimg,数据格式是voc格式&#xff0c;要训练yolo模型的话&#xff0c;可以使用脚本改成txt格式&#xff0c;数据集标注了手机&#xff0c;标签名&#xff1a;telephone,数据集总共有1960张&#xff0c;有一部分是…

中医优势病种诊疗方案数据库

中医诊疗方案结合了几千年的实践经验与理论体系&#xff0c;形成了一套独特的诊疗方法。随着国家对中医药事业的重视&#xff0c;多个中医诊疗方案被国家卫生健康委员会和国家中医药管理局等权威机构正式发布&#xff0c;这对规范中医临床诊疗行为&#xff0c;提升医疗服务质量…

汽车视频智能剪辑解决方案,满足用户对高品质汽车视频的追求

随着汽车智能化和互联网技术的快速发展&#xff0c;车载视频已经成为现代驾驶生活不可或缺的一部分。然而面对海量的行车视频&#xff0c;如何高效地剪辑、整理并分享这些精彩瞬间&#xff0c;一直是车主和汽车内容创作者们所面临的难题。美摄科技&#xff0c;作为领先的视频智…

C语言-输入数,存入数组,将奇数放置数组左侧,将偶数放置数组右侧

一 主要涉及到的知识点: 1.1 for循环 1.2 计算数组的大小int sz sizeof(arr) / sizeof(arr[0]); 1.3 函数的定义使用 1.4 while()循环 二 源代码: //输入一个整数数组,实现一个函数 //来调整该数组中数字的顺序使得数组中所有的奇数位与数组的前半部分, //所有的偶数位于…

STM32应用开发——BH1750光照传感器详解

STM32应用开发——BH1750光照传感器详解 目录 STM32应用开发——BH1750光照传感器详解前言1 硬件介绍1.1 BH1750简介1.2 硬件接线 2 软件编程2.1 软件原理2.1.1 IIC设备地址2.1.2 IIC读写2.1.3 BH1750指令集2.1.4 BH1750工作流程2.1.5 BH1750测量模式 2.2 测试代码2.3 运行测试…

2024基于PHP开发的微信抖音小程序点餐系统开发源代码案例

最近新开发了一套小程序点餐系统&#xff0c;用户点餐之后可以选择堂食或者是外卖到家&#xff0c;这套系统主要功能有&#xff0c;产品展示&#xff0c;支付系统&#xff0c;外卖配送&#xff0c;用户系统&#xff0c;积分系统&#xff0c;商家管理系统&#xff0c;抽奖系统&a…

STM32 CAN过滤器细节

STM32 CAN过滤器细节 简介 每组筛选器包含2个32位的寄存器&#xff0c;分别为CAN_FxR1和CAN_FxR2&#xff0c;它们用来存储要筛选的ID或掩码 四种模式 模式说明32位掩码模式CAN_FxR1存储ID&#xff0c; CAN_FxR2存储哪个位必须要与CAN_FxR1中的ID一致 &#xff0c; 2个寄存器…

具有图形化衬底与空气腔反射镜混合结构的深紫外Micro-LED阵列芯片

具有倾斜侧壁结构的深紫外Micro-LED的侧壁反射率是影响器件光提取效率的重要因素。由于TM模式偏振光在发生全反射时&#xff0c;产生的倏逝波诱导的金属表面等离子激元降低了倾斜侧壁处的集成全向反射镜&#xff08;ODR&#xff09;的反射率&#xff0c;从而导致光提取效率降低…

【安全】查杀linux挖矿病毒 kswapd0

中毒现象 高cpu占用&#xff0c;使用top命令查看cpu使用率长时间50%以上&#xff0c;cpu占用异常的进程八成就是挖矿病毒进程 此病毒隐藏了自己&#xff0c;top命令无法查看到挖矿病毒进程&#xff0c;可通过sysdig命令找到隐藏进程 安装sysdig curl -s https://s3.amazonaw…

java大作业(9)--实现银行基本操作(第一遍)

一.题目&#xff1a; 二.代码&#xff1a; 实现代码&#xff1a; import java.util.Date; //银行账户类 class Account{public String accountid;public String name;public double balance;public Date creatTime;public Account(String accountid,String name, double bala…

虚拟天空解决方案,创造出令人惊叹的换天效果

在汽车视频领域&#xff0c;如何打破传统拍摄限制&#xff0c;呈现出更具创意和想象力的画面&#xff0c;成为众多企业和创作者追求的目标。美摄科技作为业界领先的视频技术提供商&#xff0c;凭借其强大的AI技术和三维渲染引擎&#xff0c;推出了全新的虚拟天空解决方案&#…

MediaStream使用webRtc多窗口传递

最近在做音视频通话&#xff0c;有个需求是把当前会话弄到另一个窗口单独展示&#xff0c;但是会话是属于主窗口的&#xff0c;多窗口通信目前不能直接传递对象&#xff0c;所以想着使用webRtc在主窗口和兄弟窗口建立连接&#xff0c;把主窗口建立会话得到的MediaStream传递给兄…