从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 格式化数字的时候注意数字的范围
Apr 13 PHP
Codeigniter+PHPExcel实现导出数据到Excel文件
Jun 12 PHP
解密ThinkPHP3.1.2版本之独立分组功能应用
Jun 19 PHP
支付宝接口开发集成支付环境小结
Mar 17 PHP
php实现将上传word文件转为html的方法
Jun 03 PHP
PHP读取zip文件的方法示例
Nov 17 PHP
php使用变量动态创建类的对象用法示例
Feb 06 PHP
php使用str_replace替换多维数组的实现方法分析
Jun 15 PHP
PHP实现在windows下配置sendmail并通过mail()函数发送邮件的方法
Jun 20 PHP
在Yii2特定页面如何禁用调试工具栏Debug Toolbar详解
Aug 07 PHP
PHP实现根据数组某个键值大小进行排序的方法
Mar 13 PHP
php5与php7的区别点总结
Oct 11 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
PHPWind 发帖回帖Api PHP版打包下载
2010/02/08 PHP
PHP调用VC编写的COM组件实例
2014/03/29 PHP
ThinkPHP的截取字符串函数无法显示省略号的解决方法
2014/06/25 PHP
php中实现精确设置session过期时间的方法
2014/07/17 PHP
PHP的PDO事务与自动提交
2019/01/24 PHP
PDO::getAttribute讲解
2019/01/28 PHP
laravel 实现根据字段不同值做不同查询
2019/10/23 PHP
PHP判断当前使用的是什么浏览器(推荐)
2019/10/27 PHP
js jquery获取随机生成id的服务器控件的三种方法
2013/07/11 Javascript
js实现单击图片放大图片的方法
2015/02/17 Javascript
JavaScript里四舍五入函数round用法实例
2015/04/06 Javascript
jquery实现可关闭的倒计时广告特效代码
2015/09/02 Javascript
基于jQuery实现网页打印功能
2015/12/01 Javascript
Vue.JS入门教程之事件监听
2016/12/01 Javascript
bootstrap 模态框(modal)实现水平垂直居中显示
2017/01/23 Javascript
Bootstrap禁用响应式布局的实现方法
2017/03/09 Javascript
用js将long型数据转换成date型或datetime型的实例
2017/07/03 Javascript
详解javascript常用工具类的封装
2018/01/30 Javascript
vue2.0页面前进刷新回退不刷新的实现方法
2018/07/31 Javascript
jQuery使用each遍历循环的方法
2018/09/19 jQuery
详解vue 数组和对象渲染问题
2018/09/21 Javascript
koa2服务端使用jwt进行鉴权及路由权限分发的流程分析
2019/07/22 Javascript
layui form表单提交之后重新加载数据表格的方法
2019/09/11 Javascript
Python程序运行原理图文解析
2018/02/10 Python
对Pytorch神经网络初始化kaiming分布详解
2019/08/18 Python
python使用yield压平嵌套字典的超简单方法
2019/11/02 Python
python文字转语音的实例代码分析
2019/11/12 Python
Python3实现配置文件差异对比脚本
2019/11/18 Python
keras多显卡训练方式
2020/06/10 Python
运动会广播稿100字
2014/01/11 职场文书
即将毕业大学生自荐信
2014/01/24 职场文书
教师年度考核评语
2014/04/28 职场文书
团日活动总结模板
2014/06/25 职场文书
效能风暴心得体会
2014/09/04 职场文书
Python激活Anaconda环境变量的详细步骤
2021/06/08 Python
Java 超详细讲解数据结构中的堆的应用
2022/04/02 Java/Android