백엔드 개발 PHP 튜토리얼 APACHE的AcceptPathInfo指令使用介绍_php技巧

APACHE的AcceptPathInfo指令使用介绍_php技巧

May 17, 2016 am 09:07 AM
지침

学习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的非常简单的代码:

复制代码 代码如下:

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了。
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.

핫 AI 도구

Undresser.AI Undress

Undresser.AI Undress

사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover

AI Clothes Remover

사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool

Undress AI Tool

무료로 이미지를 벗다

Clothoff.io

Clothoff.io

AI 옷 제거제

AI Hentai Generator

AI Hentai Generator

AI Hentai를 무료로 생성하십시오.

뜨거운 도구

메모장++7.3.1

메모장++7.3.1

사용하기 쉬운 무료 코드 편집기

SublimeText3 중국어 버전

SublimeText3 중국어 버전

중국어 버전, 사용하기 매우 쉽습니다.

스튜디오 13.0.1 보내기

스튜디오 13.0.1 보내기

강력한 PHP 통합 개발 환경

드림위버 CS6

드림위버 CS6

시각적 웹 개발 도구

SublimeText3 Mac 버전

SublimeText3 Mac 버전

신 수준의 코드 편집 소프트웨어(SublimeText3)

Terraria에서 명령을 사용하여 아이템을 얻는 방법은 무엇입니까? -테라리아에서 아이템을 수집하는 방법은 무엇인가요? Terraria에서 명령을 사용하여 아이템을 얻는 방법은 무엇입니까? -테라리아에서 아이템을 수집하는 방법은 무엇인가요? Mar 19, 2024 am 08:13 AM

Terraria에서 명령을 사용하여 아이템을 얻는 방법은 무엇입니까? 1. 테라리아에서 아이템을 주는 명령은 무엇인가요? 테라리아 게임에서 아이템에 명령을 내리는 것은 매우 실용적인 기능입니다. 이 명령을 통해 플레이어는 몬스터와 싸우거나 특정 위치로 순간이동할 필요 없이 필요한 아이템을 직접 얻을 수 있습니다. 이를 통해 시간을 크게 절약하고, 게임 효율성을 향상시키며, 플레이어가 세계를 탐험하고 건설하는 데 더 집중할 수 있습니다. 전반적으로 이 기능은 게임 경험을 더 부드럽고 즐겁게 만듭니다. 2. Terraria를 사용하여 아이템 명령을 내리는 방법 1. 게임을 열고 게임 인터페이스로 들어갑니다. 2. 키보드의 "Enter" 키를 눌러 채팅창을 엽니다. 3. 채팅창에 "/give[플레이어 이름][아이템 ID][아이템 수량]" 명령 형식을 입력하세요.

VUE3 빠른 시작: Vue.js 지침을 사용하여 탭 전환 VUE3 빠른 시작: Vue.js 지침을 사용하여 탭 전환 Jun 15, 2023 pm 11:45 PM

이 글은 초보자가 Vue.js3를 빠르게 시작하고 간단한 탭 전환 효과를 얻을 수 있도록 돕는 것을 목표로 합니다. Vue.js는 재사용 가능한 구성 요소를 구축하고 애플리케이션 상태를 쉽게 관리하며 사용자 인터페이스 상호 작용을 처리하는 데 사용할 수 있는 인기 있는 JavaScript 프레임워크입니다. Vue.js3은 최신 버전의 프레임워크로, 이전 버전과 비교하여 큰 변화가 있었지만 기본 원칙은 변경되지 않았습니다. 이 기사에서는 독자가 Vue.js에 익숙해질 수 있도록 Vue.js 지침을 사용하여 탭 전환 효과를 구현합니다.

MC 명령이 제공하는 입력 방식의 무한한 가능성을 탐험해보세요. (완벽한 게임 경험을 만들어내는 혁신적인 도구 - MC 명령이 제공하는 입력 방식) MC 명령이 제공하는 입력 방식의 무한한 가능성을 탐험해보세요. (완벽한 게임 경험을 만들어내는 혁신적인 도구 - MC 명령이 제공하는 입력 방식) May 02, 2024 pm 03:01 PM

모바일 기기는 현대 사회에서 사람들의 삶에 필수적인 부분이 되었습니다. 게임은 또한 사람들의 여가 시간을 위한 주요 오락 형태 중 하나가 되었습니다. 게임 플레이를 최적화하고 게임 경험을 향상시키기 위해 새로운 도구와 기술을 개발하기 위해 끊임없이 노력하는 사람들이 있습니다. 자체 MC 명령을 사용한 입력 방식도 눈길을 끄는 혁신 중 하나다. 그리고 이것이 플레이어에게 어떻게 더 나은 게임 경험을 제공할 수 있는지 이 기사에서는 내장된 MC 명령 입력 방법의 무한한 가능성을 살펴보겠습니다. 내장 MC 명령 입력 방법 소개 내장 MC 명령 입력 방법은 MC 명령 기능과 지능형 입력 방법을 결합한 혁신적인 도구입니다. 이를 통해 모바일 장치에 입력 방식을 설치함으로써 플레이어는 게임 내에서 다양한 명령을 쉽게 사용할 수 있습니다. 빠른 명령 입력으로 게임 효율성 향상

컴퓨터가 직접 실행할 수 있는 명령의 두 부분은 무엇입니까? 컴퓨터가 직접 실행할 수 있는 명령의 두 부분은 무엇입니까? Dec 09, 2020 am 09:15 AM

컴퓨터가 직접 실행할 수 있는 명령어에는 연산 코드와 피연산자가 포함됩니다. Opcode는 작업을 수행하기 위해 컴퓨터 프로그램에 지정된 명령어 또는 필드의 일부를 나타내며 실제로 실행해야 할 명령어를 CPU에 알려주는 데 사용됩니다.

프롬프트는 더 이상 필요하지 않습니다. iChat을 사용하여 다중 모드 대화 시스템을 플레이할 수 있습니다! 프롬프트는 더 이상 필요하지 않습니다. iChat을 사용하여 다중 모드 대화 시스템을 플레이할 수 있습니다! May 15, 2023 pm 05:55 PM

Xi Xiaoyao Technology는 원저자 IQ가 땅에 떨어졌다고 말했습니다. 최근 많은 팀이 사용자 친화적인 ChatGPT를 기반으로 재창조했으며 그 중 많은 팀이 상대적으로 눈길을 끄는 결과를 얻었습니다. InternChat 작업은 다중 모드 작업을 위해 언어(커서 및 제스처)를 넘어서는 방식으로 챗봇과 상호 작용함으로써 사용자 친화성을 강조합니다. InternChat의 이름도 흥미롭습니다. 이는 상호작용, 비언어적, 챗봇을 의미합니다. 순수 언어에만 의존하는 기존의 대화형 시스템과 달리 iChat은 포인팅 지침을 추가하여 사용자와 챗봇 간의 의사소통 효율성을 크게 향상시킵니다. 게다가 저자 역시

명령어는 컴퓨터의 실행을 제어하는 ​​명령으로 무엇(What)과 주소 코드(Address Code)로 구성됩니다. 명령어는 컴퓨터의 실행을 제어하는 ​​명령으로 무엇(What)과 주소 코드(Address Code)로 구성됩니다. Jan 11, 2021 am 11:43 AM

명령어는 컴퓨터의 실행을 제어하는 ​​명령으로 연산 코드와 주소 코드로 구성됩니다. 일반적으로 명령어에는 연산 코드와 피연산자(주소 코드)라는 두 가지 측면이 포함됩니다. 연산 코드는 완료할 연산을 결정하며, 피연산자는 연산에 참여하는 데이터와 해당 연산이 위치한 유닛의 주소를 나타냅니다.

이론적으로 애플리케이션의 지침은 무엇으로 나눌 수 있습니까? 이론적으로 애플리케이션의 지침은 무엇으로 나눌 수 있습니까? Dec 10, 2020 am 09:28 AM

이론적으로 애플리케이션의 명령어는 중앙 처리 장치(CPU)의 명령어 세트와 운영 체제에서 특정 서비스를 요청하는 데 사용되는 명령어 세트의 두 가지 범주로 나눌 수 있습니다. 명령어는 컴퓨터에게 특별한 작업을 수행하도록 지시하는 코드를 의미하며 일반적으로 연산 코드와 주소 코드로 구성됩니다.

버블링 이벤트를 방지하기 위한 지침은 무엇입니까? 버블링 이벤트를 방지하기 위한 지침은 무엇입니까? Nov 21, 2023 pm 04:14 PM

버블링 이벤트를 방지하기 위한 지침에는 stopPropagation(), cancelBubble 속성, event.stopPropagation(), event.cancelBubble 속성, event.stopImmediatePropagation() 등이 포함됩니다. 자세한 소개: 1. stopPropagation()은 이벤트 전파를 중지하는 데 사용되는 가장 일반적으로 사용되는 명령 중 하나입니다. 이벤트가 트리거될 때 이 메서드를 호출하면 이벤트가 계속되는 것을 방지할 수 있습니다.

See all articles