php伪静态后无法获得url中参数_php runtime、http web中rewrite浅解和方案

点击蓝字cd26d928f844c3cb71664cb5b0a8fb39.png关注我们!每天获取最新的编程小知识!

源 / php中文网      源 / www.php.cn

本文针对函数计算的 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;

}

php url rewrite 简单实现

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

7744bb7a758865c7ef7f5195a9eecd2c.gif

-END-

声明:本文选自「 php中文网 」,搜索「 phpcnnew 」即可关注!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Nginx 是一款高性能的 Web 服务器和反向代理服务器,能够处理大量的并发连接并提供快速的响应。伪静态 URL 是指通过配置来将动态生成的 URL 转化为静态的 URL,使得 URL 更加直观和友好。 在 Nginx 实现伪静态 URL 需要借助于 rewrite 模块的功能来实现。通过 rewrite 规则,可以将原本包含动态参数URL 重写为不包含参数的静态 URL。 例如,假设原本的动态 URL 是:www.example.com/index.php?id=1,经过伪静态转换后的静态 URL 可能是:www.example.com/article/1。 实现伪静态 URL 的步骤如下: 1. 首先,需要在 Nginx 的配置文件加载 rewrite 模块。可以在 http的顶层或者 server 块进行配置。 2. 在 server 或者 location 块添加 rewrite 规则。例如,通过正则表达式匹配原始 URL,并根据规则转换为静态 URL。 3. 针对不同的动态 URL,可以分别设置不同的 rewrite 规则。根据需要,可以将多个动态参数转为更加友好的静态 URL。 实现伪静态 URL 可以带来一些好处,例如: 1. 对搜索引擎更加友好:静态 URL 更容易被搜索引擎爬虫抓取和索引,提高网站的可见度和排名。 2. URL 更加直观:静态 URL 更加具有描述性,更容易让用户理解和记忆。 3. 提高安全性:通过伪静态将动态参数隐藏起来,可以减少攻击者对网站的破坏和攻击。 需要注意的是,在实现伪静态 URL 的过程,需要确保 URL 的唯一性以及正确性。同时,还需要保证原本的动态功能不受影响,并且在页面访问时能够正确解析相应的参数

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值