从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 相关文章推荐
怎样在UNIX系统下安装MySQL
Oct 09 PHP
php中批量替换文件名的实现代码
Jul 20 PHP
PHP MySQL应用中使用XOR运算加密算法分享
Aug 28 PHP
如何让thinkphp在模型中自动完成session赋值小教程
Sep 05 PHP
Apache启动报错No space left on device: AH00023该怎么解决
Oct 16 PHP
php日期操作技巧小结
Jun 25 PHP
PHP foreach遍历多维数组实现方式
Nov 16 PHP
PHP基于XMLWriter操作xml的方法分析
Jul 17 PHP
Joomla框架实现字符串截取的方法示例
Jul 18 PHP
PHP实现验证码校验功能
Nov 16 PHP
php swoole多进程/多线程用法示例【基于php7nts版】
Aug 12 PHP
如何利用PHP实现上传图片功能详解
Sep 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
Apache, PHP在Windows 9x/NT下的安装与配置 (一)
2006/10/09 PHP
php学习笔记之 函数声明(二)
2011/06/09 PHP
PHP整合七牛实现上传文件
2015/07/03 PHP
php 读取文件夹下所有图片、文件的实例
2018/10/17 PHP
JavaScript中的Document文档对象
2008/01/16 Javascript
javascript高级程序设计第二版第十二章事件要点总结(常用的跨浏览器检测方法)
2012/08/22 Javascript
Javascript拓展String方法小结
2013/07/08 Javascript
js将当前时间格式转换成时间搓(自写)
2013/09/26 Javascript
Iframe 自动适应页面的高度示例代码
2014/02/26 Javascript
浅谈$(document)和$(window)的区别
2015/07/15 Javascript
Bootstrap3制作图片轮播效果
2016/05/12 Javascript
基于JavaScript Array数组方法(新手必看篇)
2016/08/20 Javascript
JavaScript 链式结构序列化详解
2016/09/30 Javascript
Angular2使用Augury来调试Angular2程序
2017/05/21 Javascript
Mui使用jquery并且使用点击跳转新窗口的实例
2017/08/19 jQuery
JavaScript屏蔽Backspace键的实现代码
2017/11/02 Javascript
Angular利用trackBy提升性能的方法
2018/01/26 Javascript
jQuery实现的点击标题文字切换字体效果示例【测试可用】
2018/04/26 jQuery
JS实现的Object数组去重功能示例【数组成员为Object对象】
2019/02/01 Javascript
JavaScript函数式编程(Functional Programming)组合函数(Composition)用法分析
2019/05/22 Javascript
详解vue-router 动态路由下子页面多页共活的解决方案
2019/12/22 Javascript
小程序跳转到的H5页面再跳转回跳小程序的方法
2020/03/06 Javascript
react ant Design手动设置表单的值操作
2020/10/31 Javascript
[03:09]2014DOTA2国际邀请赛 Mushi前队友送上祝福
2014/07/12 DOTA
[01:24:16]2018DOTA2亚洲邀请赛 4.6 全明星赛
2018/04/10 DOTA
python中map、any、all函数用法分析
2015/04/21 Python
python在指定目录下查找gif文件的方法
2015/05/04 Python
Python环境下安装使用异步任务队列包Celery的基础教程
2016/05/07 Python
Python文件常见操作实例分析【读写、遍历】
2018/12/10 Python
Python模块汇总(常用第三方库)
2019/10/07 Python
python和JavaScript哪个容易上手
2020/06/23 Python
2013年大学生的自我鉴定
2013/10/24 职场文书
揠苗助长教学反思
2014/02/04 职场文书
中学教师教学工作总结
2015/08/13 职场文书
幼儿园教师教育随笔
2015/08/14 职场文书
JS实现刷新网页后之前浏览位置保持不变示例详解
2022/08/14 Javascript