APACHE的AcceptPathInfo指令使用介绍


Posted in PHP onJanuary 18, 2013

学习zfdemo的时候提到设置 AcceptPathInfo 指令.

有时我们在做虚拟静态化或者让路径看起来很漂亮的时候,可能会看到http://www.example.com/index.php/html1这样URL地址,而在访问的实际是根目录下的index.php文件,而把/html1做为PATH_INFO环境变量传递给脚本。而对于apache来说上面的地址能否正确运行取决于AcceptPathInfo指令的配置

AcceptPathInfo 指令

说明 是否接受附带多余路径名信息的请求
语法 AcceptPathInfo On|Off|Default
默认值 AcceptPathInfo Default
作用域 server config, virtual host, directory, .htaccess
覆盖项 FileInfo
状态 核心(C)
模块 core
兼容性 仅在 Apache 2.0.30 及以后的版本中可用

此指令决定是否接受在实际文件名(或实际目录中一个不存在的文件)后跟随多余路径名信息的请求。这个多余的路径名信息可以当作PATH_INFO环境变量传递给脚本。

比如说,假设/test/所指向的目录下只包括一个文件:here.html ,那么对/test/here.html/more和/test/nothere.html/more的请求都会将PATH_INFO环境变量设为"/more"。

AcceptPathInfo指令的取值范围:

Off
仅当一个请求映射到一个真实存在的路径时,才会被接受。这样,如上述/test/here.html/more这样在真实文件名后跟随一个路径名的请求将会返回一个"404 NOT FOUND"错误。
On
只要前导路径可以映射到一个真实存在的文件,就可以接受该请求。这样,只要上述/test/here.html能够映射到一个有效的文件,那么对/test/here.html/more的请求就会被接收。
Default
是否接收附带多余路径名信息的请求由其对应的处理器来决定。对应普通文本的核心处理器默认会拒绝PATH_INFO 。而用于伺服脚本的处理器,比如cgi-script和isapi-isa,默认会接受PATH_INFO 。
AcceptPathInfo指令存在的首要目的就是允许您覆盖处理器关于是否接受PATH_INFO的默认设置。这种覆盖是很必要的。比如说,当您使用了类似INCLUDES这样的过滤器来根据PATH_INFO产生内容时。核心处理器通常会拒绝这样的请求,而您就可以用下述的配置使这样的脚本成为可能:

Options +Includes
SetOutputFilter INCLUDES
AcceptPathInfo On

apache 2.0以上中的默认的是没有acceptpathinfo

从APACH2.0.30以上服务器中去掉了acceptpathinfo;如果需要的话需要在http.conf中添加AcceptPathInfo On这一条。即原来的

Options FollowSymLinks includes
AllowOverride None
改成
Options FollowSymLinks includes
AllowOverride None
 AcceptPathInfo On

此指令决定了是否接受包含在某确定文件(或是某现有目录的一个不存在的文件)后附加的路径信息。此路径信息将在脚本里以PATH_INFO环境变量的形式出现。
比如说,假设/test/所指向的目录下只包括一个文件:here.html。那么对/test/here.html/more和/test/nothere.html/more的请求都会得到/more这样的PATH_INFO变量。
AcceptPathInfo指令的三个参数为:
off
仅当一个请求映射到一个真实存在的路径时,它才会被接受。这样,如上述/test/here.html/more这样的在真实文件名后跟随一个路径名的请求将会返回一个404 NOT FOUND错误。
on
如果前面的路径映射到一个真实存在的文件,此请求将被接受。如果/test/here.html映射着一个有效的文件,上例中/test/here.html/more这个请求就会被接受。
default
对于附加路径名的请求的处理方式由其对应的处理器来决定。对应普通文本的核心处理器默认会拒绝PATH_INFO。而用于伺服脚本的处理器,比如cgi-script和isapi-isa,默认会接受PATH_INFO。

PHP中的全局变量$_SERVER['PATH_INFO']是一个很有用的参数,众多的CMS系统在美化自己的URL的时候,都用到了这个参数。

对于下面这个网址:
http://www.test.com/index.php/foo/bar.html?c=index&m=search
我们可以得到 $_SERVER['PATH_INFO'] = ‘/foo/bar.html',而此时 $_SERVER['QUERY_STRING'] = 'c=index&m=search';
通常,我们最初开始PHP程序编写的时候,都会使用诸如: http://www.test.com/index.php?c=search&m=main 这样的URL,这种URL不仅看起来非常奇怪,而且对于搜索引擎也是非常不友好的。很多搜索引擎收录的时候,都会忽略Query String之后的内容,google虽然不会忽略Query String,但是对于其他不含Query String的页面,会给于比较高的PR值。

下面是一段解析PATH_INFO的非常简单的代码:

<?php 
if( !isset( $_SERVER['PATH_INFO'] ) ){ 
$pathinfo = 'default'; 
}else{ 
$pathinfo = explode('/', $_SERVER['PATH_INFO']); 
} 
if( is_array($pathinfo) AND !empty($pathinfo) ){ 
$page = $pathinfo[1]; 
}else{ 
$page = 'a.php'; 
} 
require "$page.php"; 
?>

php文件名后加斜线“/”不能正常访问,报not found错误
系统坏后,重装系统后,配置php环境。用的软件和以前的版本都相同。

环境配置好后,因工作项目都是单入口文件,index.php文件后边加了斜线才能进入。没换系统前都可以访问,可以排除软件版本问题.

刚想进入工作项目,就报not found 不知为何。测试后得知,php文件名后加斜线“/”不能正常访问

询问多人,未果。google 度娘 未果

找公司一资深php工程师
说是apache有这样一个指令 :AcceptPathInfo

在apache的配置文件里面加上:AcceptPathInfo on 就ok了。

PHP 相关文章推荐
用DBSQL类加快开发MySQL数据库程序的速度
Oct 09 PHP
PHP中防止SQL注入攻击和XSS攻击的两个简单方法
Apr 15 PHP
php selectradio和checkbox默认选择的实现方法详解
Jun 29 PHP
Laravel框架数据库CURD操作、连贯操作总结
Sep 03 PHP
Linux下PHP安装mcrypt扩展模块笔记
Sep 10 PHP
php去除二维数组的重复项方法
Nov 03 PHP
php实现将HTML页面转换成word并且保存的方法
Oct 14 PHP
php 二维数组时间排序实现代码
Nov 19 PHP
关于ThinkPhp 框架表单验证及ajax验证问题
Jul 19 PHP
php使用ftp实现文件上传与下载功能
Jul 21 PHP
PHP Socket网络操作类定义与用法示例
Aug 30 PHP
PHP 爬取网页的主要方法
Jul 13 PHP
php图片加水印原理(超简单的实例代码)
Jan 18 #PHP
php加水印的代码(支持半透明透明打水印,支持png透明背景)
Jan 17 #PHP
在windows服务器开启php的gd库phpinfo中未发现
Jan 13 #PHP
mysqli_set_charset和SET NAMES使用抉择及优劣分析
Jan 13 #PHP
PHP读取xml方法介绍
Jan 12 #PHP
用PHP编写和读取XML的几种方式
Jan 12 #PHP
php图片的裁剪与缩放生成符合需求的缩略图
Jan 11 #PHP
You might like
10条PHP编程习惯助你找工作
2008/09/29 PHP
php数组函数序列之in_array() - 查找数组中是否存在指定值
2011/11/07 PHP
如何使用PHP批量去除文件UTF8 BOM信息
2013/08/05 PHP
PHP自定义函数实现assign()数组分配到模板及extract()变量分配到模板功能示例
2018/05/23 PHP
php实现多站点共用session实现单点登录的方法详解
2019/09/18 PHP
如何确保JavaScript的执行顺序 之jQuery.html并非万能钥匙
2011/03/03 Javascript
js两行代码按指定格式输出日期时间
2011/10/21 Javascript
js检测网络是否具体连接功能的代码
2014/05/23 Javascript
使用JavaScript+canvas实现图片裁剪
2015/01/30 Javascript
JS+CSS实现滑动切换tab菜单效果
2015/08/25 Javascript
PassWord输入框代码分享
2016/06/07 Javascript
原生js实现拖拽功能基本思路详解
2018/04/18 Javascript
Vue 使用 Mint UI 实现左滑删除效果CellSwipe
2018/04/27 Javascript
详解angular2如何手动点击特定元素上的点击事件
2018/10/16 Javascript
详解Vue组件之作用域插槽
2018/11/22 Javascript
Vue.js组件间通信方式总结【推荐】
2018/11/23 Javascript
vue-cli3搭建项目的详细步骤
2018/12/05 Javascript
vue cli3.0 引入eslint 结合vscode使用
2019/05/27 Javascript
layui之table checkbox初始化时选中对应选项的方法
2019/09/02 Javascript
js实现九宫格布局效果
2020/05/28 Javascript
解决vue.js中settimeout遇到的问题(时间参数短效果不稳定)
2020/07/21 Javascript
微信小程序绘制半圆(弧形)进度条
2020/11/18 Javascript
Python编程实现二叉树及七种遍历方法详解
2017/06/02 Python
Python scikit-learn 做线性回归的示例代码
2017/11/01 Python
Django多数据库的实现过程详解
2019/08/01 Python
Python模块汇总(常用第三方库)
2019/10/07 Python
关于python pycharm中输出的内容不全的解决办法
2020/01/10 Python
基于python实现操作git过程代码解析
2020/07/27 Python
python中reload重载实例用法
2020/12/15 Python
使用简单的CSS3属性实现炫酷读者墙效果
2014/01/08 HTML / CSS
周生生珠宝香港官网:Chow Sang Sang(香港及海外配送)
2019/09/05 全球购物
个人思想理论学习的自我鉴定
2013/11/30 职场文书
战友聚会邀请函
2014/01/18 职场文书
党风廉政建设责任书
2014/04/14 职场文书
优秀学生评语大全
2014/04/25 职场文书
小学师德标兵先进事迹材料
2014/05/25 职场文书