从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中处理模拟rewrite 效果
Dec 09 PHP
php桌面中心(一) 创建数据库
Mar 11 PHP
cmd下运行php脚本
Nov 25 PHP
PHP 上传文件的方法(类)
Jul 30 PHP
PHP二维数组排序的3种方法和自定义函数分享
Apr 09 PHP
CodeIgniter启用缓存和清除缓存的方法
Jun 12 PHP
phpQuery让php处理html代码像jQuery一样方便
Jan 06 PHP
PHP实现从远程下载文件的方法
Mar 12 PHP
php简单实现单态设计模式的方法分析
Jul 28 PHP
PHP 应用容器化以及部署方法
Feb 12 PHP
PHP实现微信小程序人脸识别刷脸登录功能
May 24 PHP
关于Laravel-admin的基础用法总结和自定义model详解
Oct 08 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 杂谈《重构-改善既有代码的设计》之三 重新组织数据
2012/04/09 PHP
php自动加载autoload机制示例分享
2014/02/20 PHP
学习php设计模式 php实现抽象工厂模式
2015/12/07 PHP
Yii框架批量插入数据扩展类的简单实现方法
2017/05/23 PHP
YII框架行为behaviors用法示例
2019/04/26 PHP
apache集成php7.3.5的详细步骤
2019/06/20 PHP
Prototype中dom对象方法汇总
2008/09/17 Javascript
js下用层来实现select的title提示属性
2010/02/23 Javascript
js加入收藏夹代码(兼容ie/ff/op)
2014/05/16 Javascript
js使用栈来实现10进制转8进制与取除数及余数
2014/06/11 Javascript
Js数组排序函数sort()介绍
2015/06/08 Javascript
解决jquery实现的radio重新选中的问题
2015/07/03 Javascript
基于JS如何实现类似QQ好友头像hover时显示资料卡的效果(推荐)
2016/06/09 Javascript
TableSort.js表格排序插件使用方法详解
2017/02/10 Javascript
JS在Array数组中按指定位置删除或添加元素对象方法示例
2019/11/19 Javascript
JS函数基本定义与用法示例
2020/01/15 Javascript
vue+iview框架实现左侧动态菜单功能的示例代码
2020/07/23 Javascript
vue项目实现多语言切换的思路
2020/09/17 Javascript
python使用fileinput模块实现逐行读取文件的方法
2015/04/29 Python
浅谈Python中函数的参数传递
2016/06/21 Python
Python中的日期时间处理详解
2016/11/17 Python
对pandas中Series的map函数详解
2018/07/25 Python
利用django+wechat-python-sdk 创建微信服务器接入的方法
2019/02/20 Python
python 进程 进程池 进程间通信实现解析
2019/08/23 Python
Python列表原理与用法详解【创建、元素增加、删除、访问、计数、切片、遍历等】
2019/10/30 Python
关于python中的xpath解析定位
2020/03/06 Python
Python selenium使用autoIT上传附件过程详解
2020/05/26 Python
TensorFlow Autodiff自动微分详解
2020/07/06 Python
幼儿园教师自我鉴定
2014/03/20 职场文书
国际贸易实务实训报告
2014/11/05 职场文书
先进单位事迹材料
2014/12/25 职场文书
行政处罚事先告知书
2015/07/01 职场文书
网络舆情信息简报
2015/07/21 职场文书
九年级化学教学反思
2016/02/22 职场文书
nginx的zabbix 5.0安装部署的方法步骤
2021/07/16 Servers
Python中的 enumerate和zip详情
2022/05/30 Python