php runtime 中 http web 中 rewrite 浅解和方案

本文涉及的产品
函数计算FC,每月15万CU 3个月
Serverless 应用引擎免费试用套餐包,4320000 CU,有效期3个月
简介: 本文针对函数计算的 php runtime 的web运用开发, 提供一个简单实现url rewrite的方案

本文针对函数计算的 php runtime web 相关运用开发, 提供一个简单实现url rewrite的方案,在介绍方案之前,我们先看看相关的几个概念: 伪静态页面,动态页面,rewrite.

php runtime FAQ 列表

伪静态

  • 静态网页
    比如云栖网站上放了一个abc.html文件,你想访问它就直接输入yunqi. com/abc.html。Web服务器看到这样的地址就直接找到这个文件输出给客户端。
  • 动态网页
    假如你想做一个显示当前时间的页面,那么就可以写个PHP文件,然后访问yunqi. com/abc.php。Web服务器看到这样的地址,找到abc.php这个文件,会交给PHP执行后返回给客户端。而动态网页往往要输入参数,所以地址就变成yunqi. com/abc.php?a=1&b=2。

搜索引擎比较烦这种带问号的动态网页,因为参数可以随便加,而返回内容却不变,所以会对这种网页降权。于是有了mod_rewrite,它可以重新映射地址。

rewrite

比如当前这个页面的地址 http://www.yunqi.com/post/20153311,Web服务器收到请求后会重新映射为 www.yunqi.com/post.php?id=20153311,然后再执行那个PHP程序。(以上网址均为假设)这样,在内部不改变的情况下,对外呈现出来的网址变成了没有问号的象静态网页的网址一样。于是有人给起了个名字叫“伪静态”。其实也没什么伪的,就是没有问号的静态网址,让搜索引擎舒服点而已。

函数计算 php runtime 简单实现 rewrite 的一种方法

先以简单的nginx 中的一个简单的 rewrite 为例:

location ~ ^/(\w+)$ {
    rewrite /index.php?sub=$1;
}

location ~ ^/post/(\w+)/(\d+)$ {
    rewrite /post.php?class=$1&id=$2;
}

php url rewrite 简单实现

<?php

function rewrite_urls($s) 
{
    $in = array(
      '|^/post/(\\w+)/(\\d+)$|',
      '|^/(\\w+)$|'
    );

    $out = array(
      '/post.php?class=$1&id=$2',
      '/index.php?sub=$1',
    
    );
    return preg_replace($in, $out, $s); 
}

$post_url = '/post/literatrue/34';
echo rewrite_urls($post_url) .PHP_EOL;

$index_url = '/admin';
echo rewrite_urls($index_url) .PHP_EOL;

执行输出结果:

/post.php?class=literatrue&id=34
/index.php?sub=admin

因此在使用 php runtime的时候,根据收到请求的uri(假设是/post/literatrue/34), 执行 rewrite_urls 函数(rewrite 规则填写在这个函数的 $in$out 中), 然后将 rewrite 后的 uri (/post.php?class=literatrue&id=34) 作为调用 fcPhpCgiProxy.requestPhpCgi 函数时,传入参数 $fastCgiParams 的一对 key-value; 有关 fcPhpCgiProxy 可以参考 #683415#640912 介绍 fcPhpCgiProxy 的部分。

参考:

https://www.zhihu.com/question/20153311/answer/14147350
https://www.smashingmagazine.com/2011/11/introduction-to-url-rewriting/

目录
相关文章
|
9月前
|
PHP Android开发
android通过http上传文件,服务器端用php写(原创)
android通过http上传文件,服务器端用php写(原创)
83 4
|
3月前
|
前端开发 JavaScript 安全
前端性能调优:HTTP/2与HTTPS在Web加速中的应用
【10月更文挑战第27天】本文介绍了HTTP/2和HTTPS在前端性能调优中的应用。通过多路复用、服务器推送和头部压缩等特性,HTTP/2显著提升了Web性能。同时,HTTPS确保了数据传输的安全性。文章提供了示例代码,展示了如何使用Node.js创建一个HTTP/2服务器。
90 3
|
3月前
|
NoSQL 安全 PHP
hyperf-wise-locksmith,一个高效的PHP分布式锁方案
`hyperf-wise-locksmith` 是 Hyperf 框架下的互斥锁库,支持文件锁、分布式锁、红锁及协程锁,有效防止分布式环境下的竞争条件。本文介绍了其安装、特性和应用场景,如在线支付系统的余额扣减,确保操作的原子性。
45 4
|
3月前
|
缓存 安全 网络安全
HTTP/2与HTTPS在Web加速中的应用
HTTP/2与HTTPS在Web加速中的应用
110 11
|
4月前
|
安全 网络协议 算法
HTTPS网络通信协议揭秘:WEB网站安全的关键技术
HTTPS网络通信协议揭秘:WEB网站安全的关键技术
337 4
HTTPS网络通信协议揭秘:WEB网站安全的关键技术
|
3月前
|
前端开发 安全 应用服务中间件
前端性能调优:HTTP/2与HTTPS在Web加速中的应用
【10月更文挑战第26天】随着互联网的快速发展,前端性能调优成为开发者的重要任务。本文探讨了HTTP/2与HTTPS在前端性能优化中的应用,介绍了二进制分帧、多路复用和服务器推送等特性,并通过Nginx配置示例展示了如何启用HTTP/2和HTTPS,以提升Web应用的性能和安全性。
55 3
|
3月前
|
数据采集 网络安全 PHP
用PHP抓取HTTPS资源时的常见问题与解决方法
本文探讨了在PHP中抓取HTTPS资源时常见的问题及其解决方案,包括SSL证书验证、反爬机制应对、HTTPS代理设置及提高抓取效率。通过代码示例展示了如何使用代理IP和合理设置请求头等方法,以高效获取贝壳网的房价数据。
|
4月前
|
设计模式 SQL 安全
PHP中的设计模式:单例模式的深入探索与实践在PHP开发领域,设计模式是解决常见问题的高效方案集合。它们不是具体的代码,而是一种编码和设计经验的总结。单例模式作为设计模式中的一种,确保了一个类仅有一个实例,并提供一个全局访问点。本文将深入探讨单例模式的基本概念、实现方式及其在PHP中的应用。
单例模式在PHP中的应用广泛,尤其在处理数据库连接、日志记录等场景时,能显著提高资源利用率和执行效率。本文从单例模式的定义出发,详细解释了其在PHP中的不同实现方法,并探讨了使用单例模式的优势与注意事项。通过对示例代码的分析,读者将能够理解如何在PHP项目中有效应用单例模式。
|
5月前
|
弹性计算 关系型数据库 Serverless
告别资源瓶颈,函数计算驱动多媒体文件处理方案:https://www.aliyun.com/solution/tech-solution/fc-drive-file
本文介绍了一种基于阿里云的一键部署解决方案,利用云服务器ECS、RDS MySQL、OSS、函数计算FC及MNS等服务,实现高效的多媒体文件处理。方案通过事件驱动机制,将文件处理任务解耦,并自动弹性扩展,按需付费,简化部署流程,提高处理效率。本文还提供了详细的部署步骤与体验反馈,展示了从配置到文件处理的全过程。
|
7月前
|
人工智能 开发框架 Devops
.NET技术概览:** 本文探讨了.NET的核心特性,包括多语言支持、Common Language Runtime、丰富的类库和跨平台能力,强调其在企业级、Web、移动及游戏开发中的应用。
【7月更文挑战第4天】.NET技术概览:** 本文探讨了.NET的核心特性,包括多语言支持、Common Language Runtime、丰富的类库和跨平台能力,强调其在企业级、Web、移动及游戏开发中的应用。此外,讨论了.NET如何通过性能优化、DevOps集成、AI与ML支持以及开源策略应对未来挑战,为开发者提供强大工具,共创软件开发新篇章。
85 3