从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 checkbox复选框值的获取与checkbox默认值输出方法
May 15 PHP
php与paypal整合方法
Nov 28 PHP
php中对2个数组相加的函数
Jun 24 PHP
PHP的explode和implode的使用说明
Jul 17 PHP
php Imagick获取图片RGB颜色值
Jul 28 PHP
PHP中浮点数计算比较及取整不准确的解决方法
Jan 09 PHP
smarty内置函数capture用法分析
Jan 22 PHP
Nginx下配置codeigniter框架方法
Apr 07 PHP
php如何获取文件的扩展名
Oct 28 PHP
Laravel Memcached缓存驱动的配置与应用方法分析
Oct 08 PHP
CI框架无限级分类+递归的实现代码
Nov 01 PHP
PHP项目多语言配置平台实现过程解析
May 18 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实现图片压缩的两则实例
2014/07/19 PHP
php把大写命名转换成下划线分割命名
2015/04/27 PHP
php格式化json函数示例代码
2016/05/12 PHP
PHP获取数组中指定的一列实例
2017/12/27 PHP
jquery清空textarea等输入框实现代码
2013/04/22 Javascript
纯JavaScript实现HTML5 Canvas六种特效滤镜示例
2013/06/28 Javascript
输入自动提示搜索提示功能的使用说明:sugggestion.txt
2013/09/02 Javascript
如何设置iframe高度自适应在跨域情况下的可用方法
2013/09/06 Javascript
jQuery插件开发的两种方法及$.fn.extend的详解
2014/01/16 Javascript
js实现日历可获得指定日期周数及星期几示例分享(js获取星期几)
2014/03/14 Javascript
js如何调用qq互联api实现第三方登录
2014/03/28 Javascript
用jQuery的AJax实现异步访问、异步加载
2016/11/02 Javascript
jquery easyui dataGrid动态改变排序字段名的方法
2017/03/02 Javascript
使用Vue.js开发微信小程序开源框架mpvue解析
2018/03/20 Javascript
微信小程序框架wepy之动态控制类名
2018/09/14 Javascript
详解关于vue2.0工程发布上线操作步骤
2018/09/27 Javascript
通过npm或yarn自动生成vue组件的方法示例
2019/02/12 Javascript
ES6 Promise对象的含义和基本用法分析
2019/06/14 Javascript
JS秒杀倒计时功能完整实例【使用jQuery3.1.1】
2019/09/03 jQuery
详解vue中使用axios对同一个接口连续请求导致返回数据混乱的问题
2019/11/06 Javascript
js+css3实现炫酷时钟
2020/08/18 Javascript
python 将列表里的字典元素合并为一个字典实例
2020/09/01 Python
Python gevent协程切换实现详解
2020/09/14 Python
matplotlib之pyplot模块之标题(title()和suptitle())
2021/02/22 Python
党员自我评价分享
2013/12/13 职场文书
《乌鸦和狐狸》教学反思
2014/02/08 职场文书
《中华少年》教学反思
2014/02/15 职场文书
签约仪式策划方案
2014/06/02 职场文书
新教师岗前培训方案
2014/06/05 职场文书
护理专业毕业生自荐信
2014/06/15 职场文书
市场营销毕业求职信
2014/08/07 职场文书
2014老师三严三实对照检查材料思想汇报
2014/09/18 职场文书
大学生实习证明范本
2014/09/19 职场文书
公司租房协议书范本
2014/10/08 职场文书
2015年八一建军节活动总结
2015/03/20 职场文书
MySQL查询日期时间
2022/05/15 MySQL