从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之第三天
Oct 09 PHP
PHP4中session登录页面的应用
Jul 25 PHP
php缩放图片(根据宽高的等比例缩放)实例介绍
Jun 09 PHP
解析阿里云ubuntu12.04环境下配置Apache+PHP+PHPmyadmin+MYsql
Jun 26 PHP
php安装xdebug/php安装pear/phpunit详解步骤(图)
Dec 22 PHP
PHP闭包实例解析
Sep 08 PHP
php实现的click captcha点击验证码类实例
Sep 23 PHP
php cookie名使用点号(句号)会被转换
Oct 23 PHP
PHP+HTML+JavaScript+Css实现简单爬虫开发
Mar 28 PHP
thinkPHP5.0框架环境变量配置方法
Mar 17 PHP
ThinkPHP中图片按比例切割的代码实例
Mar 08 PHP
详解php反序列化
Jun 10 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
深入解析WordPress中加载模板的get_template_part函数
2016/01/11 PHP
PHP实现二维数组中的查找算法小结
2018/06/09 PHP
PHP中创建和编辑Excel表格的方法
2018/09/13 PHP
jquery 插件 任意位置浮动固定层
2008/12/25 Javascript
jquery表单验证使用插件formValidator
2012/11/10 Javascript
使用js复制链接中的部分文字的方法
2015/07/30 Javascript
解决jquery插件:TypeError:$.browser is undefined报错的方法
2015/11/21 Javascript
jQuery+css实现炫目的动态块漂移效果
2016/01/28 Javascript
vue实例中data使用return包裹的方法
2018/08/27 Javascript
javaScript实现游戏倒计时功能
2018/11/17 Javascript
vue实现购物车抛物线小球动画效果的方法详解
2019/02/13 Javascript
vue 指令和过滤器的基本使用(品牌管理案例)
2019/11/04 Javascript
JQuery省市联动效果实现过程详解
2020/05/08 jQuery
用云开发Cloudbase实现小程序多图片内容安全监测的代码详解
2020/06/07 Javascript
vue 实现动态路由的方法
2020/07/06 Javascript
[02:51]2018年度DOTA2最佳中单位选手-完美盛典
2018/12/17 DOTA
python框架django基础指南
2016/09/08 Python
简单学习Python多进程Multiprocessing
2017/08/29 Python
python之Character string(实例讲解)
2017/09/25 Python
读取json格式为DataFrame(可转为.csv)的实例讲解
2018/06/05 Python
python 寻找list中最大元素对应的索引方法
2018/06/28 Python
python3实现字符串操作的实例代码
2019/04/16 Python
Python如何筛选序列中的元素的方法实现
2019/07/15 Python
pandas条件组合筛选和按范围筛选的示例代码
2019/08/26 Python
pytorch加载自定义网络权重的实现
2020/01/07 Python
python Matplotlib数据可视化(2):详解三大容器对象与常用设置
2020/09/30 Python
做一个有道德的人活动方案
2014/08/25 职场文书
优秀班组事迹材料
2014/12/24 职场文书
怀孕辞职信怎么写
2015/02/28 职场文书
医院志愿者活动总结
2015/05/06 职场文书
毕业设计论文致谢词
2015/05/14 职场文书
2016抗战胜利71周年红领巾广播稿
2015/12/18 职场文书
入团申请书格式
2019/06/20 职场文书
详解RedisTemplate下Redis分布式锁引发的系列问题
2021/04/27 Redis
深入解析Apache Hudi内核文件标记机制
2022/03/31 Servers
instantclient客户端 连接oracle数据库
2022/04/26 Oracle