$_SERVER['URI']
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
例如:http://www.hujuntao.com/index.php?p=3
$_SERVER['REQUEST_URI']获得的就是/index.php?p=3这部分
。
$_SERVER["HTTP_X_REWRITE_URL"]则在IIS下获得的是当前URL,在apache下的值为空
例如:
当前URL:http://www.hujuntao.com/
IIS环境下:
$_SERVER['REQUEST_URI'] = /index.php
$_SERVER["HTTP_X_REWRITE_URL"] =/
apache环境下:
$_SERVER['REQUEST_URI'] = /
$_SERVER["HTTP_X_REWRITE_URL"] =”
当前URL:http://www.hujuntao.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环境则相反。
function getRequestUri() {
if (isset($_SERVER['HTTP_X_REWRITE_URL'])) {
// check this first so IIS will catch
$requestUri = $_SERVER['HTTP_X_REWRITE_URL'];
} elseif (isset($_SERVER['REDIRECT_URL'])) {
// Check if using mod_rewrite
$requestUri = $_SERVER['REDIRECT_URL'];
} elseif (isset($_SERVER['REQUEST_URI'])) {
$requestUri = $_SERVER['REQUEST_URI'];
} elseif (isset($_SERVER['ORIG_PATH_INFO'])) {
// IIS 5.0, PHP as CGI
$requestUri = $_SERVER['ORIG_PATH_INFO'];
if (!empty($_SERVER['QUERY_STRING'])) {
$requestUri .= '?' . $_SERVER['QUERY_STRING'];
}
}
return $requestUri;
} $PHP_SCHEME = $_SERVER['SERVER_PORT'] == '443' ? 'https://' : 'http://'; //测试服务器是否启动了ssl 连接如
https 协议默认端口 是443
随机推荐
- github第一步之初始化操作
目录 0.首先注册一个账号 1.创建知识库Repository 2.创建一个分支branch--feature 3.制作并提交commit 4.打开拉取请求pull 5.合并自己的pull请求 git ...
- 使用scp上传和下载文件
利用scp传输文件 1.从服务器下载文件 scp username@servername:/path/filename /tmp/local_destination 例如scp codinglog@1 ...
- flask-数据库模型设计2
3.数据库模型设计 3.1构建蓝图项目目录 1.前后台项目目录分析 2.蓝图构建项目目录 蓝图:一个应用中或跨域应用制作组件和支持通用模式. 蓝图的作用:将不同的功能模块化 构建大型应用 优化项目 ...
- mybatis*中DefaultVFS的logger乱码问题
从网上下的Java Persistence with MyBatis 3的源码 出现这个问题的原因是logback记日志的时候乱码 ResolverUtil - Not a JAR: file:... ...
- PostgreSQL查看表大小的命令
SELECT table_name, pg_size_pretty(table_size) AS table_size, pg_size_pretty(indexes_size) AS indexes ...
- python模块安装注意事项
在安装python的第三方模块时,需要注意路径问题. 1.如果python是按默认位置安装的,则可以直接在命令提示符中进行安装,即pip install module_name. 2.如果python ...
- Jsop的原理
Jsop的原理:利用script不存在跨域的问题,动态创建script标签,把需要请求的数据源地址赋值给其src属性,并且指定一个回调函数,从而接受到我们想要的数据
- 【转】[总结]vue开发常见知识点及问题资料整理(持续更新)
1.(webpack)vue-cli构建的项目如何设置每个页面的title 2.vue项目中使用axios上传图片等文件 3.qs.stringify() 和JSON.stringify()的区别以及 ...
- ActiveMQ 中的链表
ActiveMQ 中的消息在内存中时,以链表形式保存,以 PendingList 表示,每一个消息是 PendingNode. PendingList 主要有2种实现:OrderedPendingLi ...
- VSS+SourceAnywhere for VSS搭建版本控制系统教程
VSS:Microsoft Visual Source Safe,本教程使用VSS2005(好像2005就是官方更新的最后一版了). SourceAnywhere for VSS:分为服务端和客户端: ...