从PHP $_SERVER相关参数判断是否支持Rewrite模块


Posted in PHP onSeptember 26, 2013

如果是//3water.com/p1141.html形式的URL,可通过$_SERVER['REQUEST_URI']和$_SERVER['QUERY_STRING']值的区别来分析,最主要是如果页面是通过重定向会产生$_SERVER['REDIRECT_QUERY_STRING']和$_SERVER['REDIRECT_URL']两上参数,因此判断页面是否重定向就非常简单,只需要判断这两个值存在的情况就既可,但这只是在Apache环境下才有效。

如果是ISAPI Rewrite环境如何判断?

如果是ISAPI Rewrite环境,虽然不会产生如上$_SERVER['REDIRECT_QUERY_STRING']和$_SERVER['REDIRECT_URL']两上参数,但同样会产生自己独特的参数$_SERVER['HTTP_X_REWRITE_URL'],这个参数只有在ISAPI环境下才会产生,因此使用这个参数就能判断当前的URL是何种形式,方法如下:

$isApi = (isset($_SERVER['HTTP_X_REWRITE_URL']) && strpos($_SERVER['HTTP_X_REWRITE_URL'],'?')) ? TRUE : FALSE;

通过对当前URL显示形式的判断,就能知道程序将如何执行以及是否需要301重定向,如果当前URL是//3water.com/?=p1141,则需要使用301重定向到//3water.com/p1141.html,如下:

header("HTTP/1.1 301 Moved Permanently"); 

header("Location://3water.com/p1141.html");

然后再走重定向后程序的流程,这样就保证了页面的统一,同时也解决了ISAPI和Apache的Rewrite循环重定向问题。

ISAPI和Apache是否重定向判断:

ISAPI使用:

$_SERVER['HTTP_X_REWRITE_URL']

Apache使用:

$_SERVER['REDIRECT_QUERY_STRING']或$_SERVER['REDIRECT_URL']

只要掌握$_SERVER各参数的用法,就能轻松解决ISAPI和Apache的Rewrite循环重定向问题。

下面是其它网友的补充可以参考一下

WordPress通过301重定向实现非首先域(非www)跳转向本来是一个很简单事情,由于没弄清楚$_SERVER[‘HTTP_X_REWRITE_URL'] 和$_SERVER[‘REQUEST_URI']的区别导致了循环重定向问题。
现在来具体研究下$_SERVER[‘HTTP_X_REWRITE_URL'] 和$_SERVER[‘REQUEST_URI']的区别
首先要纠正一部分的观点就是IIS+PHP不支持$_SERVER[‘REQUEST_URI']
不是,不支持是PHP Version 版本的问题,php4.4.0不支持 $_SERVER[‘REQUEST_URI'],php5.2.5则增加了支持;

$_SERVER[‘REQUEST_URI']常用来获当前URL
例如://3water.com/index.php?p=3
$_SERVER[‘REQUEST_URI']获得的就是/index.php?p=3这部分。
$_SERVER[“HTTP_X_REWRITE_URL”]则在IIS下获得的是当前URL,在apache下的值为空

例如:
当前URL://3water.com/

IIS环境下:
$_SERVER[‘REQUEST_URI'] = /index.php
$_SERVER[“HTTP_X_REWRITE_URL”] =/
apache环境下:
$_SERVER[‘REQUEST_URI'] = /
$_SERVER[“HTTP_X_REWRITE_URL”] =”

当前URL://3water.com/index.php
IIS环境下:
$_SERVER[‘REQUEST_URI'] = /index.php
$_SERVER[“HTTP_X_REWRITE_URL”] =/index.php

apache环境下:
$_SERVER[‘REQUEST_URI'] = /index.php
$_SERVER[“HTTP_X_REWRITE_URL”] =”

而我需要的就是判断当前URL是否包含/index.php

由此可见,IIS环境下首先域名重定向用$_SERVER[“HTTP_X_REWRITE_URL”]代替$_SERVER[‘REQUEST_URI'],apache环境则相反。

PHP 相关文章推荐
PHP 和 COM
Oct 09 PHP
Php部分常见问题总结
Oct 09 PHP
十天学会php之第八天
Oct 09 PHP
PHP 选项及相关信息函数库
Dec 04 PHP
php随机输出名人名言的代码
Oct 07 PHP
浅谈php和.net的区别
Sep 28 PHP
ThinkPHP实现支付宝接口功能实例
Dec 02 PHP
ThinkPHP自定义Redis处理SESSION的实现方法
May 16 PHP
PHP实现的文件操作类及文件下载功能示例
Dec 24 PHP
分析php://output和php://stdout的区别
May 06 PHP
PHP实现基本留言板功能原理与步骤详解
Mar 26 PHP
PHPstorm启用自动换行的方法详解(IDE)
Sep 17 PHP
ThinkPHP利用PHPMailer实现邮件发送实现代码
Sep 26 #PHP
PHP实现今天是星期几的几种写法
Sep 26 #PHP
一个PHP的远程图片抓取函数分享
Sep 25 #PHP
使用php判断服务器是否支持Gzip压缩功能
Sep 24 #PHP
使用PHP下载CSS文件中的图片的代码
Sep 24 #PHP
php实现的获取网站备案信息查询代码(360)
Sep 23 #PHP
DOM XPATH获取img src值的query
Sep 23 #PHP
You might like
PHP 线程安全与非线程安全版本的区别深入解析
2013/08/06 PHP
Windows下的PHP 5.3.x安装 Zend Guard Loader教程
2014/09/06 PHP
PHP+Mysql+jQuery实现发布微博程序 php篇
2015/10/15 PHP
php检查函数必传参数是否存在的实例详解
2017/08/28 PHP
Web层改进II-用xmlhttp 无声息提交复杂表单
2007/01/22 Javascript
JScript中的undefined和"undefined"的区别
2007/03/08 Javascript
Jquery Select操作方法集合脚本之家特别版
2010/05/17 Javascript
jquery.jstree 增加节点的双击事件代码
2010/07/27 Javascript
js 有框架页面跳转(target)三种情况下的应用
2013/04/09 Javascript
给ListBox添加双击事件示例代码
2013/12/02 Javascript
jQuery判断checkbox是否选中的3种方法
2014/08/12 Javascript
JavaScript 学习笔记之操作符
2015/01/14 Javascript
javascript实现的简单的表单验证
2015/07/10 Javascript
JS控制静态页面之间传递参数获取参数并应用的简单实例
2016/08/10 Javascript
浅谈移动端之js touch事件 手势滑动事件
2016/11/07 Javascript
使用JS批量选中功能实现更改数据库中的status状态值(批量展示)
2016/11/22 Javascript
基于react框架使用的一些细节要点的思考
2017/05/31 Javascript
关于javascript作用域的常见面试题分享
2017/06/18 Javascript
微信小程序实现购物页面左右联动
2019/02/15 Javascript
小程序关于请求同步的总结
2019/05/05 Javascript
jQuery实现倒计时功能完整示例
2020/06/01 jQuery
浅谈JavaScript节流和防抖函数
2020/08/25 Javascript
[04:44]显微镜下的DOTA2第二期——你所没有注意到的细节
2014/06/20 DOTA
python监控文件并且发送告警邮件
2018/06/21 Python
Django实现分页显示效果
2019/10/31 Python
Python学习笔记之函数的参数和返回值的使用
2019/11/20 Python
Python视频编辑库MoviePy的使用
2020/04/01 Python
Python openpyxl 插入折线图实例
2020/04/17 Python
tensorflow指定CPU与GPU运算的方法实现
2020/04/21 Python
HTML5视频播放插件 video.js介绍
2018/09/29 HTML / CSS
与C++相比,Java中的数组有什么不同
2014/03/25 面试题
学生学习总结的自我评价
2013/10/22 职场文书
《长征》教学反思
2014/04/27 职场文书
爱牙日宣传活动总结
2015/02/05 职场文书
深度学习tensorflow基础mnist
2021/04/14 Python
教你怎么用python selenium实现自动化测试
2021/05/27 Python