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

 更新时间:2024年04月18日 10:18:53   作者:etafort  
这篇文章主要为大家详细介绍了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?

到此这篇关于php实现简单路由实现伪静态的文章就介绍到这了,更多相关php伪静态内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • php中使用key,value,current,next和prev函数遍历数组的方法

    php中使用key,value,current,next和prev函数遍历数组的方法

    这篇文章主要介绍了php中使用key,value,current,next和prev函数遍历数组的方法,较为详细的分析了php中数组遍历的常用技巧与实例用法,需要的朋友可以参考下
    2015-03-03
  • PHP简单计算两个时间差的方法示例

    PHP简单计算两个时间差的方法示例

    这篇文章主要介绍了PHP简单计算两个时间差的方法,结合具体实例形式分析了php日期与时间的转换及数学运算相关操作技巧,需要的朋友可以参考下
    2017-06-06
  • PHP在同一域名下两个不同的项目做独立登录机制详解

    PHP在同一域名下两个不同的项目做独立登录机制详解

    这篇文章主要给大家介绍了关于PHP在同一域名下两个不同的项目如何做独立登录机制的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面来一起看看吧。
    2017-09-09
  • PHP 自动加载类原理与用法实例分析

    PHP 自动加载类原理与用法实例分析

    这篇文章主要介绍了PHP 自动加载类原理与用法,结合具体实例形式分析了PHP 自动加载类基本概念、原理、使用方法及操作注意事项,需要的朋友可以参考下
    2020-04-04
  • 如何用PHP实现多线程编程

    如何用PHP实现多线程编程

    原以为 PHP 普遍都是单线程模型,并不适合多线程领域,发现PHP的多线程也颇有可取之处,用来解决某些问题竟然非常适合。本文对比多进程介绍了下多线程的优势和适用场景,提出了一种巧用方案,并使用PHP代码实现了多线程的常见用法。
    2021-05-05
  • 深入PHP数据加密详解

    深入PHP数据加密详解

    本篇文章是对PHP数据加密进行了详细的分析介绍,需要的朋友参考下
    2013-06-06
  • 利用PHP实现智能文件类型检测的实现代码

    利用PHP实现智能文件类型检测的实现代码

    通常我们想严格限制文件类型的时候,可以简单地用$_FILES['myFile']['type']  取得文件的 MIME类型然后来检测它是否是合法的类型。
    2011-08-08
  • PHP入门教程之数组用法汇总(创建,删除,遍历,排序等)

    PHP入门教程之数组用法汇总(创建,删除,遍历,排序等)

    这篇文章主要介绍了PHP入门教程之数组用法,结合大量实例总结分析了php关于数组的创建、打印、遍历、获取、排序、插入、删除等常见操作技巧,需要的朋友可以参考下
    2016-09-09
  • PHP开发技巧之PHAR反序列化详解

    PHP开发技巧之PHAR反序列化详解

    这篇文章主要为大家介绍了PHP开发技巧之PHAR反序列化详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-10-10
  • PHP-CLI命令行模式开发从新手到高手

    PHP-CLI命令行模式开发从新手到高手

    php-cli就是php在命令行运行的接口,区别于在Web服务器上运行的php环境(php-cgi, isapi等),也就是说,php不单可以写前台网页,它还可以用来写后台的程序,cli模式的业务场景:定时任务,有数据同步,数据处理,多线程,进程通信,共享内存都要使用cli
    2024-04-04

最新评论