从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执行sql语句的写法
Mar 10 PHP
PHP 上传文件的方法(类)
Jul 30 PHP
PHP冒泡排序算法代码详细解读
Jul 17 PHP
PHP得到某段时间区间的时间戳 php定时任务
Apr 12 PHP
PHP笔记之:日期函数的使用介绍
Apr 24 PHP
基于ubuntu下nginx+php+mysql安装配置的具体操作步骤
Apr 28 PHP
PHP获取php,mysql,apche的版本信息示例代码
Jan 16 PHP
PHP正则替换函数preg_replace和preg_replace_callback使用总结
Sep 22 PHP
php curl登陆qq后获取用户信息时证书错误
Feb 03 PHP
php构造函数的继承方法
Feb 09 PHP
php使用标签替换的方式生成静态页面
May 21 PHP
基于PHP的登录和注册的功能的实现
Aug 06 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防止SQL注入详解及防范
2013/11/12 PHP
在Laravel框架里实现发送邮件实例(邮箱验证)
2016/05/20 PHP
laravel config文件配置全局变量的例子
2019/10/13 PHP
php实现简单四则运算器
2020/11/29 PHP
获取DOM对象的几种扩展及简写
2006/10/09 Javascript
javascript 隐藏/显示指定的区域附HTML元素【legend】用法
2010/03/05 Javascript
js获取location.href的参数实例代码
2013/08/02 Javascript
js改变Iframe中Src的方法
2015/05/05 Javascript
JQuery自动触发事件的方法
2015/06/13 Javascript
AngularJs学习第五篇从Controller控制器谈谈$scope作用域
2016/06/08 Javascript
Angular 2应用的8个主要构造块有哪些
2016/10/17 Javascript
js实现带简单弹性运动的导航条
2017/02/22 Javascript
详解vue-cli + webpack 多页面实例应用
2017/04/25 Javascript
微信小程序中使用Promise进行异步流程处理的实例详解
2017/08/17 Javascript
JS实现定时任务每隔N秒请求后台setInterval定时和ajax请求问题
2017/10/15 Javascript
详解angularjs实现echart图表效果最简洁教程
2017/11/29 Javascript
如何在Vue.js中实现标签页组件详解
2019/01/02 Javascript
通过实例了解js函数中参数的传递
2019/06/15 Javascript
微信小程序点击item使之滚动到屏幕中间位置
2020/03/25 Javascript
Python数据结构之Array用法实例
2014/10/09 Python
Pycharm代码无法复制,无法选中删除,无法编辑的解决方法
2018/10/22 Python
深入解析Python小白学习【操作列表】
2019/03/23 Python
详解用python写一个抽奖程序
2019/05/10 Python
python hashlib加密实现代码
2019/10/17 Python
python如何安装下载后的模块
2020/07/03 Python
opencv 图像礼帽和图像黑帽的实现
2020/07/07 Python
宝拉珍选官方旗舰店:2%水杨酸精华液,收缩毛孔粗大和祛痘
2018/07/01 全球购物
新西兰第一的行李箱网站:luggage.co.nz
2019/07/22 全球购物
冰淇淋店创业计划书范文
2013/12/27 职场文书
工作检讨书500字
2014/10/19 职场文书
佛光寺导游词
2015/02/10 职场文书
数学考试作弊检讨书300字
2015/02/16 职场文书
元旦晚会主持词开场白
2015/05/28 职场文书
MySQL8.0.24版本Release Note的一些改进点
2021/04/22 MySQL
python实现的web监控系统
2021/04/27 Python
Ruby GDBM操作简介及数据存储原理
2022/04/19 Ruby