PHP伪静态的使用主要是为了隐藏传递的参数名,下面给大家介绍php实现伪静态的方法,对php实现伪静态相关知识感兴趣的朋友一起学习吧

PHP伪静态的使用主要是为了隐藏传递的参数名,下面给大家介绍php实现伪静态的方法,具体详情请看下文。

说起伪静态的实现方案,你是不是很爽快的回答"简单,配置下apache的重写规则就行了嘛"

但是你有没有发现这种情况,你最近弄了很多新功能,每天上几个新功能,每天都有好多伪静态配置,才开始两天运维同学还乐意配合,过两天运维同学就要骂了。你麻痹,脑残为什么不一次搞完,天天麻烦我。但是了,你要上线啊,不得不苦逼的求运维同学了,然后说出一句程序猿界最不要脸的话"这次最后一次改动了",然后后面又要改,哎,你的人格算是扫地了。。。

如果有这样的烦恼存在,请看下面的文章,保证你以后再也不求运维了,想干啥就干啥。。。

那PHP实现伪静态有多少种方法了?个人见解和统计奥,有四种方法

1、使用apache的URL重写规则,这个大家都懂,在apache里面配置,
这里同学们都造,只列举一段简单的配置

RewriteEngine On

RewriteRule ^/test.html index.php?controller=index&action=test
[L]

2、使用PHP的pathinfo ,
你是不是有看到有的网站这样玩'www.xxx.com/index.php/c/index/a/test/id/100' ,
当然要支持这种你需要把'php.ini' 中的参数

'cgi.fix_pathinfo'
设置为1。拿'www.xxx.com/index.php/c/index/a/test/id/100'来举例

echo $_SERVER['PATH_INFO']; //输出'/c/index/a/test/id/100'

到这,应该明白了吧,你再对这段进行解析,分配实际地址

3、使用404机制,一般情况下伪静态都是实际不存在的页面,因此可以使用apache
404配置,但是有些问题,就是'post'类型的请求会被抛弃,导致你无法获取'$_POST',

但是'$_GET'仍然可以获取, 假设此处404页面为'404page.php', apache 配置如下:

ErrorDocument 404 /404page.php

然后在 '404page.php'中嵌入如下代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
header("HTTP/1.1 200
OK"
); //这里一定要有,不然状态就是404
$reqUrl =
$_SERVER['REQUEST_URI'];
// 请求地址
function parseUrlParams($queryUrl)
{
$arr =
explode('?', $queryUrl);
parse_str($arr[1],
$param);
if($param)
{
foreach($param
as $key =>
$value)
{
$_GET[$key] =
$value;
}
}
}
parseUrlParams($reqUrl);
// url解析参数
//然后你就可以使用 $reqUrl 根据自己的规则匹配不同的实际请求地址
if(preg_match('#^/test.html#is', $reqUrl,
$matches))
{
include('index.php');
die();
}

4、方法3的改进型,方法3在apache内部机制相当于重定向了,导致post(get)传递的参数无法获取。分析上面的其实是找不到相关文件,那当服务器找不到相关文件时,我们为它指定一个文件,不就OK了,它就不用跳转了,这时POST之类都不会丢失。apache
配置如下:

RewriteEngine On

RewriteCond %{REQUEST_FILENAME} !-f

RewriteCond %{REQUEST_FILENAME} !-d

RewriteRule . index.php

上面一段配置的大概意思是 当请求的文件或者目录无法找到时 使用根目录下的 'index.php'
替代,那这时你就可以在'index.php'中获取相关参数并解析到实际请求地址

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
function getReqUri()
{
return trim($_SERVER["REQUEST_URI"]);
}
$reqUri =
getReqUri();
if(preg_match('/^\/test.html/isU', $reqUri))
{//解析请求地址
include 'test.php';
exit();
}

以上内容给大家介绍了php实现伪静态的方法,希望对大家有所帮助。

PHP实现伪静态方法汇总的更多相关文章

  1. 你真的会玩SQL吗?实用函数方法汇总

    你真的会玩SQL吗?系列目录 你真的会玩SQL吗?之逻辑查询处理阶段 你真的会玩SQL吗?和平大使 内连接.外连接 你真的会玩SQL吗?三范式.数据完整性 你真的会玩SQL吗?查询指定节点及其所有父节 ...

  2. Java实现时间动态显示方法汇总

    这篇文章主要介绍了Java实现时间动态显示方法汇总,很实用的功能,需要的朋友可以参考下 本文所述实例可以实现Java在界面上动态的显示时间.具体实现方法汇总如下: 1.方法一 用TimerTask: ...

  3. C#读写文件的方法汇总_C#教程_脚本之家

    C#读写文件的方法汇总_C#教程_脚本之家 http://www.jb51.net/article/34936.htm

  4. UITextView实现placeHolder方法汇总

    UITextField中有一个placeholder属性,可以设置UITextField的占位文字,起到提示用户的作用.可是UITextView就没那么幸运了,apple没有给UITextView提供 ...

  5. 将编码从GB2312转成UTF-8的方法汇总(从前台、程序、数据库)

    这篇文章主要介绍了将编码从GB2312转成UTF-8的方法汇总(从前台.程序.数据库),需要的朋友可以参考下 一个网站如果需要国际化,就需要将编码从GB2312转成UTF-8,其中有很多的问题需要注意 ...

  6. 本地获取System权限CMD方法汇总(转)

    本地获取System权限CMD方法汇总(转) 稍微整理了下,大概有三种方法可以本地获取system权限的cmd,但前提都是当前用户具备administrator权限. 下面列举的三种方法各有千秋,看你 ...

  7. Javascript对象属性与方法汇总

    Javascript对象属性与方法汇总 发布时间:2015-03-06 编辑:www.jquerycn.cn 详细介绍下,javascript对象属性与对象方法的相关知识,包括javascript字符 ...

  8. .net(C#)操作文件的几种方法汇总

    .net(C#)操作文件的几种方法汇总 System.IO命名空间下类的用法:在System.IO名称空间中包含了用于文件输入输出的主要类.File:实用类,提供许多静态方法,用于移动.复制和删除文件 ...

  9. jquery常用函数与方法汇总

    1.delay(duration,[queueName]) 设置一个延时来推迟执行队列中之后的项目. jQuery1.4新增.用于将队列中的函数延时执行.他既可以推迟动画队列的执行,也可以用于自定义队 ...

随机推荐

  1. Maven安装教程

    一.安装Maven及配置环境变量 1.Maven官网地址:http://maven.apache.org/download.cgi  下载apache-maven-3.5.0-bin.zip文件 2. ...

  2. Shader 1:能接受阴影的透明shader

    第一次接触Shader,项目需要,直接说需求吧,需要一个透明并且能接受阴影的shader.unity系统自带的shader已经满足不了了.上一段代码吧 Shader "GreenArch/T ...

  3. css实现多行文本溢出显示省略号(…)全攻略

    省略号在ie中可以使用text-overflow:ellipsis了,但有很多的浏览器都需要固定宽度了,同时ff这些浏览器并不支持text-overflow:ellipsis设置了,下文来给各位整理一 ...

  4. 房上的猫:if选择结构

    一.基本if结构: 1.定义:if选择结构是根据条件判断之后再做处理的一种语法结构! 2.逻辑:首先对条件进行判断  >如果为真,则执行代码块  >如果为假,执行代码块后面的部分二.常用逻 ...

  5. ArcGis连接oracle失败:ORA-6413:连接未打开

    问题: 通过ARCMap 添加Oracle数据库连接时提示,ORA-6413:连接未打开. 运行环境: ArcGis 10.2 Oracle 10g 解决方法: 通过上网查找解决方法,网友说" ...

  6. powershell V6.0登基之:《瘸腿脚本大帝进攻linux!》

    ------[前言]------ 每个ps大版本发布,我都会写个消息. 这次的,主标题就叫:powershell v6.0登基副标题就叫:<瘸腿脚本大帝进攻linux!> ------[p ...

  7. 学习总结:gcc/g++ 编译与链接

    gcc/g++ 编译与链接 编译与链接的过程可以分解为四个步骤:预处理.编译.汇编.链接 预处理:源代码文件和相关的头文件,被预处理器cpp预处理成一个后缀为 .i 的文件(选项:-E) 编译:把预处 ...

  8. input表单的type属性详解,不同type不同属性之间区别

    目标:详解表单input标签type属性常用的属性值 一.input标签和它的type属性 PS:input 元素可以用来生成一个供用户输入数据的简单文本框. 在默认的情况下, 什么样的数据均可以输入 ...

  9. 运维架构服务监控Open-Falcon

    一. 介绍 监控系统是整个运维环节,乃至整个产品生命周期中最重要的一环,事前及时预警发现故障,事后提供翔实的数据用于追查定位问题.监控系统作为一个成熟的运维产品,业界有很多开源的实现可供选择.当公司刚 ...

  10. Two Sum(两个数的相加)

    2017.11.10题目描述:Given nums = [2, 7, 11, 15], target = 9, Because nums[0] + nums[1] = 2 + 7 = 9, retur ...