从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 相关文章推荐
PHP5中MVC结构学习
Oct 09 PHP
PHP:风雨欲来 路在何方?
Oct 09 PHP
利用php+mcDropdown实现文件路径可在下拉框选择
Aug 07 PHP
php使用base64加密解密图片示例分享
Jan 20 PHP
php递归删除目录下的文件但保留的实例分享
May 10 PHP
ThinkPHP2.0读取MSSQL提示Incorrect syntax near the keyword 'AS'的解决方法
Jun 25 PHP
php的XML文件解释类应用实例
Sep 22 PHP
php实现比较全的数据库操作类
Jun 18 PHP
php观察者模式应用场景实例详解
Feb 03 PHP
Yii2中hasOne、hasMany及多对多关联查询的用法详解
Feb 15 PHP
PHP 枚举类型的管理与设计知识点总结
Feb 13 PHP
Cookie跨域问题解决方案代码示例
Nov 24 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
Discuz! 5.0.0论坛程序中加入一段js代码,让会员点击下载附件前自动弹出提示窗口
2007/04/18 PHP
PHP 伪静态隐藏传递参数名的四种方法
2010/02/22 PHP
PHP服务器页面间跳转实现方法
2012/08/02 PHP
Zend Framework教程之Zend_Config_Xml用法分析
2016/03/23 PHP
php通过PHPExcel导入Excel表格到MySQL数据库的简单实例
2016/10/29 PHP
PHP观察者模式原理与简单实现方法示例
2017/08/25 PHP
jquery获取子节点和父节点的示例代码
2013/09/10 Javascript
用正则表达式替换图片地址img标签
2013/11/22 Javascript
关闭时刷新父窗口两种方法
2014/05/07 Javascript
JS判断浏览器是否支持某一个CSS3属性的方法
2014/10/17 Javascript
jquery使用slideDown实现模块缓慢拉出效果的方法
2015/03/27 Javascript
jquery实现的横向二级导航效果代码
2015/08/26 Javascript
JavaScript中字面量与函数的基本使用知识
2015/10/20 Javascript
整理Javascript函数学习笔记
2015/12/01 Javascript
js 求时间差的实现代码
2016/04/26 Javascript
基于复选框demo(分享)
2017/09/27 Javascript
vue 自定义 select内置组件
2018/04/10 Javascript
vue 组件间的通信之子组件向父组件传值的方式
2020/07/29 Javascript
vue项目接口管理,所有接口都在apis文件夹中统一管理操作
2020/08/13 Javascript
利用Psyco提升Python运行速度
2014/12/24 Python
Python处理RSS、ATOM模块FEEDPARSER介绍
2015/02/18 Python
更改Ubuntu默认python版本的两种方法python-> Anaconda
2016/12/18 Python
python交互式图形编程实例(二)
2017/11/17 Python
python实现最大子序和(分治+动态规划)
2019/07/05 Python
flask框架单元测试原理与用法实例分析
2019/07/23 Python
使用python制作一个解压缩软件
2019/11/13 Python
python可以用哪些数据库
2020/06/22 Python
印度在线杂货店:bigbasket
2018/08/23 全球购物
自主招生自荐信范文
2013/12/04 职场文书
银行开业庆典方案
2014/02/06 职场文书
春节联欢晚会主持词
2014/03/24 职场文书
党的群众路线教育实践活动方案
2014/10/31 职场文书
贷款承诺书
2015/01/20 职场文书
Redis6.0搭建集群Redis-cluster的方法
2021/05/08 Redis
opencv-python图像配准(匹配和叠加)的实现
2021/06/23 Python
解决vue中provide inject的响应式监听
2022/04/19 Vue.js