从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 相关文章推荐
利用文件属性结合Session实现在线人数统计
Oct 09 PHP
php实现mysql数据库备份类
Mar 20 PHP
PHP面向对象概念
Nov 06 PHP
PHP乱码问题,UTF-8乱码常见问题小结
Apr 09 PHP
php实现监听事件
Nov 06 PHP
PHP输出缓存ob系列函数详解
Mar 11 PHP
PHP图片自动裁切应付不同尺寸的显示
Oct 16 PHP
php绘图之加载外部图片的方法
Jan 24 PHP
php求一个网段开始与结束IP地址的方法
Jul 09 PHP
PHP7之Mongodb API使用详解
Dec 26 PHP
PHP MYSQL简易交互式站点开发
Dec 27 PHP
PHP实现用session来实现记录用户登陆信息
Oct 15 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
apache+mysql+php+ssl服务器之完全安装攻略
2006/09/05 PHP
PHP mysql事务问题实例分析
2016/01/18 PHP
基于thinkPHP实现的微信自定义分享功能示例
2016/09/23 PHP
PHP7匿名类用法分析
2016/09/26 PHP
PHP crc32()函数讲解
2019/02/14 PHP
PHP中散列密码的安全性分析
2019/07/26 PHP
php使用goto实现自动重启swoole、reactphp、workerman服务的代码
2020/04/13 PHP
Javascript中的回调函数和匿名函数的回调示例介绍
2014/05/12 Javascript
ajax跨域调用webservice的实现代码
2016/05/09 Javascript
阿里云ecs服务器中安装部署node.js的步骤
2016/10/08 Javascript
js实现简单的网页换肤效果
2017/01/18 Javascript
js实现显示手机号码效果
2017/03/09 Javascript
JavaScript你不知道的一些数组方法
2017/08/18 Javascript
解决layui的input独占一行的问题
2019/09/10 Javascript
基于layui的table插件进行复选框联动功能的实现方法
2019/09/19 Javascript
简单了解Vue computed属性及watch区别
2020/07/10 Javascript
跟老齐学Python之一个免费的实验室
2014/09/14 Python
Python的MongoDB模块PyMongo操作方法集锦
2016/01/05 Python
python实现随机森林random forest的原理及方法
2017/12/21 Python
Python编程实现的简单神经网络算法示例
2018/01/26 Python
Python简易版停车管理系统
2019/08/12 Python
python进程间通信Queue工作过程详解
2019/11/01 Python
利用Python绘制Jazz网络图的例子
2019/11/21 Python
通过实例了解Python str()和repr()的区别
2020/01/17 Python
python高阶函数map()和reduce()实例解析
2020/03/16 Python
jupyter notebook 调用环境中的Keras或者pytorch教程
2020/04/14 Python
matplotlib 曲线图 和 折线图 plt.plot()实例
2020/04/17 Python
selenium与xpath之获取指定位置的元素的实现
2021/01/26 Python
乐高瑞士官方商店:LEGO CH
2020/08/16 全球购物
探亲假请假条
2014/04/11 职场文书
驾驶员安全责任书
2014/07/22 职场文书
家庭暴力离婚起诉书
2015/05/18 职场文书
尊师重教主题班会
2015/08/14 职场文书
最新的离婚协议书范本!
2019/07/02 职场文书
Nginx+SpringBoot实现负载均衡的示例
2021/03/31 Servers
Python实战之实现康威生命游戏
2021/04/26 Python