从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中操作MySQL数据库的一些要注意的问题
Oct 09 PHP
php中文本数据翻页(留言本翻页)
Oct 09 PHP
两个强悍的php 图像处理类1
Jun 15 PHP
php提交表单时判断 if($_POST[submit])与 if(isset($_POST[submit])) 的区别
Feb 08 PHP
19个超实用的PHP代码片段
Mar 14 PHP
PHP调用VC编写的COM组件实例
Mar 29 PHP
php对二维数组进行相关操作(排序、转换、去空白等)
Nov 04 PHP
thinkPHP框架对接支付宝即时到账接口回调操作示例
Nov 14 PHP
PHP基于DOM创建xml文档的方法示例
Feb 08 PHP
php实现微信支付之退款功能
May 30 PHP
php求斐波那契数的两种实现方式【递归与递推】
Sep 09 PHP
PHP实现Markdown文章上传到七牛图床的实例内容
Feb 11 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
菜鸟修复电子管记
2021/03/02 无线电
php下使用SMTP发邮件的代码
2008/01/10 PHP
PHP下对字符串的递增运算代码
2010/08/21 PHP
Parse正式发布开源PHP SDK
2014/08/11 PHP
Javascript 作用域使用说明
2009/08/13 Javascript
javascript 节点排序 2
2011/01/31 Javascript
jQuery Ajax 实例全解析
2011/04/20 Javascript
一款Jquery 分页插件的改造方法(服务器端分页)
2011/07/11 Javascript
Js保留小数点的4种效果实现代码分享
2014/04/12 Javascript
node.js中的console.dir方法使用说明
2014/12/10 Javascript
js实现动画特效的文字链接鼠标悬停提示的方法
2015/03/02 Javascript
jQuery实现表格展开与折叠的方法
2015/05/04 Javascript
JQuery自适应窗口大小导航菜单附源码下载
2015/09/01 Javascript
javascript实现的网站访问量统计代码
2015/12/20 Javascript
解析JavaScript面向对象概念中的Object类型与作用域
2016/05/10 Javascript
再谈Javascript中的异步以及如何异步
2016/08/19 Javascript
js HTML5手机刮刮乐代码
2020/09/29 Javascript
浅谈jquery采用attr修改form表单enctype不起作用的问题
2016/11/25 Javascript
20170918 前端开发周报之JS前端开发必看
2017/09/18 Javascript
JavaScript实现新年倒计时效果
2018/11/17 Javascript
详解Vue中的scoped及穿透方法
2019/04/18 Javascript
详解vue-cli项目开发/生产环境代理实现跨域请求
2019/07/23 Javascript
layui-select动态选中值的例子
2019/09/23 Javascript
Angular进行简单单元测试的实现方法实例
2020/08/16 Javascript
React Native登录之指纹登录篇的示例代码
2020/11/03 Javascript
浅谈python中截取字符函数strip,lstrip,rstrip
2015/07/17 Python
Python退火算法在高次方程的应用
2018/07/26 Python
打包python 加icon 去掉cmd黑窗口方法
2019/06/24 Python
python matplotlib拟合直线的实现
2019/11/19 Python
Python 打印自己设计的字体的实例讲解
2021/01/04 Python
Django中的DateTimeField和DateField实现
2021/02/24 Python
办公文员的工作岗位职责
2013/11/12 职场文书
环保建议书300字
2014/05/14 职场文书
舞蹈兴趣小组活动总结
2014/07/07 职场文书
基层党员干部四风问题整改方向和措施
2014/09/25 职场文书
java多态注意项小结
2021/10/16 Java/Android