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.mzph.cn/news/825125.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【honggfuzz学习笔记】honggfuzz的基本特性

本文架构 1.动机2.honggfuzz的基本概念官网描述解读 3. honggfuzz的反馈驱动(Feedback-Driven)软件驱动反馈&#xff08;software-based coverage-guided fuzzing&#xff09;代码覆盖率代码覆盖率的计量单位 代码覆盖率的统计方式 硬件驱动反馈&#xff08; hardware-based co…

CTFHUB RCE作业

题目地址&#xff1a;CTFHub 完成情况如图&#xff1a; 知识点&#xff1a; preg_match_all 函数 正则匹配函数 int preg_match_all ( string $pattern , string $subject [, array &$matches [, int $flags PREG_PATTERN_ORDER [, int $offset 0 ]]] )搜索 subject 中…

【Python小游戏】植物大战僵尸的实现与源码分享

文章目录 Python版植物大战僵尸环境要求方法源码分享初始化页面&#xff08;部分&#xff09;地图搭建&#xff08;部分&#xff09;定义植物类 &#xff08;部分&#xff09;定义僵尸类&#xff08;部分&#xff09;游戏运行入口 游戏源码获取 Python版植物大战僵尸 已有的植…

resume

通过添加 --resume 参数&#xff0c;用户可以在命令行中指定一个检查点文件的路径&#xff0c;用于恢复之前训练的模型状态。如果用户不指定 --resume 参数&#xff0c;则默认值为空字符串。 python train.py train multi_resnet18_kd --resume ./save_checkpoints/multi_resn…

Git:远程仓库名称变更本地无法提交解决

报错信息 blog % git push To github.com:hannah-lin-sama/web-docs.git! [rejected] main -> main (non-fast-forward) 错误&#xff1a;无法推送一些引用到 github.com:hannah-lin-sama/web-docs.git 提示&#xff1a;更新被拒绝&#xff0c;因为您当前分支的最新…

JavaScript中处理回调与状态更新

JavaScript中处理高速回调与状态更新的问题分析与解决方案 在JavaScript编程中&#xff0c;处理高速执行的回调函数时常会遇到状态管理的问题&#xff0c;尤其是在处理数组或其他共享数据结构时。这些问题通常因为JavaScript的异步执行特性以及共享状态的可变性引起。下面将分…

git工具的安装及使用

git工具的安装及使用 一、安装git工具 Windows下安装git工具&#xff1a;在Windows下打开以下网址&#xff0c;直接下载安装软件即可。https://gitforwindows.org/ 在ubuntu下安装git工具&#xff1a;保证ubuntu能正常上网的前提下&#xff0c;直接使用以下命令安装git工具即…

基于混合算法的冬枣果型分级研究与实践

如题&#xff0c;这是一个学生的课题&#xff0c;如果写论文可以从以下角度展开&#xff1a; 一、引言 1. 研究背景及意义 2. 国内外研究现状 3. 研究目标与内容 二、冬枣果型分级现状及挑战 1. 冬枣果型分级的重要性 2. 传统分级方法的局限性 3. 机器学习和深度学习在果型分级…

解决拉格朗日四平方和定理

1 问题 “拉格朗日四平方数和定理”是数学中著名的一个定理&#xff0c;其内容为&#xff1a;任意一个正整数均可表示为四个整数的平方和(其中有些整数可以为零)。要求输入一个数&#xff0c;找出所有符合该定理的四个整数&#xff1f; 2 方法 可以通过“四平方数和定理”的含义…

【Proteus】51单片机对直流电机的控制

直流电机&#xff1a;输出或输入为直流电能的旋转电机。能实现直流电能和机械能互相转换的电机。把它作电动机运行时是直流电动机&#xff0c;电能转换为机械能&#xff1b;作发电机运行时是直流发电机&#xff0c;机 械能转换为电能。 直流电机的控制&#xff1a; 1、方向控制…

动态多目标测试函数DF1-DF14,FDA1-FDA5,SDP1-SDP12的TurePOF(MATLAB代码)

动态多目标测试函数FDA1、FDA2、FDA3、FDA4、FDA5的turePOF&#xff08;MATLAB代码&#xff09; 动态多目标测试函数DF1-DF14的turePOF变化&#xff08;提供MATLAB代码&#xff09; 动态多目标测试函数SDP1-SDP12的TurePOF变化视频&#xff08;含MATLAB代码及参考文献&#xff…

Android Compose使用AndroidView,并将 AndroidView 保存成图片。

谢谢关注&#xff01;&#xff01; 前言&#xff1a;上一篇文章主要介绍HarmonyOs开发之———容器组件使用 http://t.csdnimg.cn/r9Qd1 一、使用 AndroidView //images 是一个 uri数组var androidView by remember { mutableStateOf<View?>(null) }AndroidView(facto…

【Vue3源码学习】— CH3.2 VNode解析(下)

VNode解析—下 4. normalizeChildren4.1 源码解析4.2 位运算符 |= 的应用4.2.1 按位或(|)4.2.2 赋值4.2.3 使用场景4.2.4 源码中`vnode.patchFlag |= PatchFlags.DYNAMIC_SLOTS`说明4.3 `;(children as RawSlots)._ = SlotFlags.STABLE` 说明5. Vue 应用的实例化和挂载流程5.…

cpp智能指针详解+简单模拟实现

在cpp中为了避免内存泄漏采取了一系列手段&#xff0c;例如智能指针&#xff0c;智能指针采用RAII思想来管理内存(Resource Acquisition Is Initialization是一种利用对象生命周期来控制程序资源&#xff08;如内存、文件句柄、网络连接、互斥量等等&#xff09;的简单技术。&a…

Java Swing制作大鱼吃小鱼魔改版本

《大鱼吃小鱼》这款游戏的历史渊源可以追溯到休闲游戏的兴起和发展。在游戏的早期发展阶段&#xff0c;开发者们开始探索各种简单而有趣的游戏玩法&#xff0c;以吸引玩家的注意力。在这样的背景下&#xff0c;《大鱼吃小鱼》应运而生&#xff0c;它结合了自然界的食物链原理与…

AI大模型之idea通义灵码智能AI插件安装方式

问题描述 主要讲述如何进行开发工具 idea中如何进行通义灵码的插件的安装解决方案 直接在idea的plugin市场中安装 下载插件之后进行安装 见资源

【python】中文数字转换为阿拉伯数字

题目&#xff1a;中文数字转换为阿拉伯数字&#xff0c;如下&#xff1a; 输入&#xff1a; 十一万亿五千三百万三千二百零七输出&#xff1a; 11000053003207思路&#xff1a; 先写一个处理10000以下的转换函数&#xff0c;如下代码的 num_process() 以亿和万分别进行切分…

JUC专题——Java并发基础

本文部分内容节选自《Java并发编程的艺术》 线程 现代操作系统调度的最小单元是 线程 , 也叫 轻量级进程 . 一个进程里可以创建多个线程, 线程拥有各自的计数器, 堆栈和局部变量, 并且能够访问共享的内存变量 线程优先级 现代操作系统使用时分的形式调度运行的线程, 操作系…

lua 光速入门

文章目录 安装注释字符串变量逻辑运算条件判断循环函数Table (表)常用全局函数模块化 首先明确 lua 和 js Python一样是动态解释性语言&#xff0c;需要解释器执行。并且不同于 Python 的强类型与 js 的弱类型&#xff0c;它有点居中&#xff0c;倾向于强类型。 安装 下载解释…

【OpenHarmony】TDD-FUZZ环境配置

零、参考 1、AttributeError: ‘ElementTree‘ object has no attribute ‘getiterator‘&#xff1a;https://blog.csdn.net/suhao0911/article/details/110950742 一、创建工作目录 1、新建工作目录如&#xff1a;D:\0000_TDD_FUZZ\0000_ohos_tdd_fuzz。 2、gitee上下载 t…