Simple explanation and solution of rewrite in php runtime and http web

藏色散人
Release: 2023-04-06 16:50:01
forward
2809 people have browsed it

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

伪静态

静态网页

比如xxx网站上放了一个abc.html文件,你想访问它就直接输入xxx. com/abc.html。Web服务器看到这样的地址就直接找到这个文件输出给客户端。

动态网页

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

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

rewrite

比如当前这个页面的地址 http://www.xxx.com/post/20153311,Web服务器收到请求后会重新映射为 www.xxx.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;
}
Copy after login

php url rewrite 简单实现

<?php
function rewrite_urls($s) 
{
    $in = array(
      &#39;|^/post/(\\w+)/(\\d+)$|&#39;,
      &#39;|^/(\\w+)$|&#39;
    );
    $out = array(
      &#39;/post.php?class=$1&id=$2&#39;,
      &#39;/index.php?sub=$1&#39;,
    
    );
    return preg_replace($in, $out, $s); 
}
$post_url = &#39;/post/literatrue/34&#39;;
echo rewrite_urls($post_url) .PHP_EOL;
$index_url = &#39;/admin&#39;;
echo rewrite_urls($index_url) .PHP_EOL;
Copy after login

执行输出结果:

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

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

The above is the detailed content of Simple explanation and solution of rewrite in php runtime and http web. For more information, please follow other related articles on the PHP Chinese website!

Related labels:
source:aliyun.com
Statement of this Website
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template