从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
改变Apache端口等配置修改方法
Jun 05 PHP
PHP 日志缩略名的创建函数代码
May 26 PHP
PHP得到mssql的存储过程的输出参数功能实现
Nov 23 PHP
PHP生成随机密码类分享
Jun 25 PHP
php缓冲输出实例分析
Jan 05 PHP
PHP+apc+ajax实现的ajax_upload上传进度条代码
Jan 25 PHP
PHP下载远程图片的几种方法总结
Apr 07 PHP
PHP实现的DES加密解密封装类完整实例
Apr 29 PHP
laravel 框架配置404等异常页面
Jan 07 PHP
php实现登录页面的简单实例
Sep 29 PHP
在laravel中使用with实现动态添加where条件
Oct 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
coreseek 搜索英文的问题详解
2013/06/08 PHP
Codeigniter中mkdir创建目录遇到权限问题和解决方法
2014/07/25 PHP
PHP统一页面编码避免乱码问题
2015/04/09 PHP
Yii+MYSQL锁表防止并发情况下重复数据的方法
2016/07/14 PHP
PHP双向链表定义与用法示例
2018/01/31 PHP
Laravel框架使用技巧之使用url()全局函数返回前一个页面的地址方法详解
2020/04/06 PHP
拖动一个HTML元素
2006/12/22 Javascript
简单的两种Extjs formpanel加载数据的方式
2013/11/09 Javascript
JavaScript针对网页节点的增删改查用法实例
2015/02/02 Javascript
javascript新闻跑马灯实例代码
2020/07/29 Javascript
Angularjs中UI Router的使用方法
2016/05/14 Javascript
实例分析浏览器中“JavaScript解析器”的工作原理
2016/12/12 Javascript
微信小程序动态的加载数据实例代码
2017/04/14 Javascript
vue proxyTable 接口跨域请求调试的示例
2017/09/12 Javascript
浅谈vue项目优化之页面的按需加载(vue+webpack)
2017/12/11 Javascript
JS/jQuery实现DIV延时几秒后消失或显示的方法
2018/02/12 jQuery
vue 权限认证token的实现方法
2018/07/17 Javascript
Antd下拉选择,自动匹配功能的实现
2020/10/24 Javascript
[39:18]完美世界DOTA2联赛PWL S3 Forest vs LBZS 第二场 12.17
2020/12/19 DOTA
Django自定义用户认证示例详解
2018/03/14 Python
使用python编写监听端
2018/04/12 Python
OpenCV 模板匹配
2019/07/10 Python
在Python中使用turtle绘制多个同心圆示例
2019/11/23 Python
初中生三年学习生活的自我评价
2013/11/03 职场文书
求职信模板怎么做
2014/01/26 职场文书
优秀共产党员先进事迹
2014/01/27 职场文书
应届毕业生个人求职信范文
2014/01/29 职场文书
青年文明号复核材料
2014/02/11 职场文书
2014年大学庆元旦迎新年活动方案
2014/03/09 职场文书
水利水电专业自荐信
2014/07/08 职场文书
2014年外贸业务员工作总结
2014/12/11 职场文书
2015年九一八事变纪念日演讲稿
2015/03/19 职场文书
会计出纳岗位职责
2015/03/31 职场文书
详细聊聊浏览器是如何看闭包的
2021/11/11 Javascript
python如何读取和存储dict()与.json格式文件
2022/06/25 Python
CSS使用Flex和Grid布局实现3D骰子
2022/08/05 HTML / CSS