从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 相关文章推荐
福利彩票幸运号码自动生成器
Oct 09 PHP
PHP 表单提交给自己
Jul 24 PHP
apache mysql php 源码编译使用方法
May 03 PHP
探讨:web上存漏洞及原理分析、防范方法
Jun 29 PHP
php多维数组去掉重复值示例分享
Mar 02 PHP
ThinkPHP中__initialize()和类的构造函数__construct()用法分析
Nov 29 PHP
Yii中使用PHPExcel导出Excel的方法
Dec 26 PHP
PHP身份证校验码计算方法
Aug 10 PHP
详解yii2使用多个数据库的案例
Jun 16 PHP
PHP实现mysqli批量执行多条语句的方法示例
Jul 22 PHP
PHP常用正则表达式精选(推荐)
May 28 PHP
使用PHP开发留言板功能
Nov 19 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缓存技术介绍
2006/11/25 PHP
生成卡号php代码
2008/04/09 PHP
file_get_contents("php://input", "r")实例介绍
2013/07/01 PHP
jquery ui dialog里调用datepicker的问题
2009/08/06 Javascript
jquery学习笔记 用jquery实现无刷新登录
2011/08/08 Javascript
深入分析JSONP跨域的原理
2014/12/10 Javascript
45个JavaScript编程注意事项、技巧大全
2015/02/11 Javascript
使用Sticky组件实现带sticky效果的tab导航和滚动导航的方法
2016/03/22 Javascript
在web中js实现类似excel的表格控件
2016/09/01 Javascript
jQuery validata插件实现方法
2017/06/25 jQuery
JS实现批量上传文件并显示进度功能
2017/06/27 Javascript
React 使用recharts实现散点地图的示例代码
2018/12/07 Javascript
从vue源码看props的用法
2019/01/09 Javascript
jquery实现鼠标悬浮弹出气泡提示框
2020/12/23 jQuery
[51:53]完美世界DOTA2联赛决赛日 Inki vs LBZS 第二场 11.08
2020/11/10 DOTA
在Python的Flask框架下使用sqlalchemy库的简单教程
2015/04/09 Python
Python中利用sorted()函数排序的简单教程
2015/04/27 Python
python实现中文输出的两种方法
2015/05/09 Python
pandas数据清洗,排序,索引设置,数据选取方法
2018/05/18 Python
Anaconda下安装mysql-python的包实例
2018/06/11 Python
Python读写zip压缩文件的方法
2018/08/29 Python
Python搭建代理IP池实现接口设置与整体调度
2019/10/27 Python
Python使用enumerate获取迭代元素下标
2020/02/03 Python
python针对Oracle常见查询操作实例分析
2020/04/30 Python
详解使用CSS3的@media来编写响应式的页面
2017/11/01 HTML / CSS
加拿大在线隐形眼镜专家:PerfectLens.ca
2016/11/19 全球购物
数控机械专业个人的自我评价
2014/01/02 职场文书
薪酬专员岗位职责
2014/02/18 职场文书
走进敬老院活动总结
2014/07/10 职场文书
龙潭大峡谷导游词
2015/02/10 职场文书
大学生英文求职信范文
2015/03/19 职场文书
匿名信格式范文
2015/05/27 职场文书
大学生见习总结报告
2015/06/24 职场文书
2016年中秋节寄语大全
2015/12/07 职场文书
java objectUtils 使用可能会出现的问题
2022/02/28 Java/Android
MyBatis在注解上使用动态SQL方式(@select使用if)
2022/07/07 Java/Android