从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
php中通过smtp发邮件的类,测试通过
Jan 22 PHP
站长助手-网站web在线管理程序 v1.0 下载
May 12 PHP
用php获取本周,上周,本月,上月,本季度日期的代码
Aug 05 PHP
php中比较简单的导入phpmyadmin生成的sql文件的方法
Jun 28 PHP
深入apache配置文件httpd.conf的部分参数说明
Jun 28 PHP
PHP empty函数报错解决办法
Mar 06 PHP
thinkphp模板继承实例简述
Nov 26 PHP
php中session_id()函数详细介绍,会话id生成过程及session id长度
Sep 23 PHP
php轻松实现文件上传功能
Mar 03 PHP
php版微信开发Token验证失败或请求URL超时问题的解决方法
Sep 23 PHP
php 删除一维数组中某一个值元素的操作方法
Feb 01 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 接口类与抽象类的实际作用
2009/11/26 PHP
php中使用url传递数组的方法
2015/02/11 PHP
php array_key_exists() 与 isset() 的区别
2016/10/24 PHP
js post方式传递提交的实现代码
2010/05/31 Javascript
10款新鲜出炉的 jQuery 插件(Ajax 插件,有幻灯片、图片画廊、菜单等)
2011/06/08 Javascript
JS 各种网页尺寸判断实例方法
2013/04/18 Javascript
js获取滚动距离的方法
2015/05/30 Javascript
jQuery ajax 当async为false时解决同步操作失败的问题
2016/11/18 Javascript
微信小程序本作用域下调用全局JS详解及实例
2017/02/22 Javascript
Vue input控件通过value绑定动态属性及修饰符的方法
2017/05/03 Javascript
JavaScript之Map和Set_动力节点Java学院整理
2017/06/29 Javascript
layui点击数据表格添加或删除一行的例子
2019/09/12 Javascript
在vue中动态添加class类进行显示隐藏实例
2019/11/09 Javascript
JS实现简单省市二级联动
2019/11/27 Javascript
浅谈Vue使用Cascader级联选择器数据回显中的坑
2020/10/31 Javascript
[36:29]2018DOTA2亚洲邀请赛 4.1 小组赛 A组加赛 LGD vs TNC
2018/04/02 DOTA
多线程爬虫批量下载pcgame图片url 保存为xml的实现代码
2013/01/17 Python
python基础教程之数字处理(math)模块详解
2014/03/25 Python
详解在Python程序中自定义异常的方法
2015/10/16 Python
如何分离django中的媒体、静态文件和网页
2019/11/12 Python
Python 窗体(tkinter)下拉列表框(Combobox)实例
2020/03/04 Python
VS2019+python3.7+opencv4.1+tensorflow1.13配置详解
2020/04/16 Python
Django QuerySet查询集原理及代码实例
2020/06/13 Python
Python hashlib和hmac模块使用方法解析
2020/12/08 Python
HTML5验证以及日期显示的实现详解
2013/07/05 HTML / CSS
html5跳转小程序wx-open-launch-weapp踩坑
2020/12/02 HTML / CSS
PUMA澳大利亚官方网站:德国运动品牌
2018/10/19 全球购物
程序员经常用到的UNIX命令
2015/04/13 面试题
应聘收银员个人的求职信
2013/11/30 职场文书
高中生活自我鉴定
2014/01/18 职场文书
幼儿园消防安全制度
2014/01/26 职场文书
《大江保卫战》教学反思
2014/04/11 职场文书
合作协议书怎么写
2014/04/18 职场文书
辅导员评语
2014/05/04 职场文书
乡镇保密工作责任书
2014/07/28 职场文书
php远程请求CURL案例(爬虫、保存登录状态)
2021/04/01 PHP