ホームページ バックエンド開発 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ヘンタイを無料で生成します。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

Terrariaでコマンドを使用してアイテムを取得するにはどうすればよいですか? -Terrariaでアイテムを集めるにはどうすればよいですか? Terrariaでコマンドを使用してアイテムを取得するにはどうすればよいですか? -Terrariaでアイテムを集めるにはどうすればよいですか? Mar 19, 2024 am 08:13 AM

Terrariaでコマンドを使用してアイテムを取得するにはどうすればよいですか? 1. Terraria でアイテムを与えるコマンドは何ですか? Terraria ゲームでは、アイテムにコマンドを与えることは非常に実用的な機能です。このコマンドにより、プレイヤーはモンスターと戦ったり、特定の場所にテレポートしたりすることなく、必要なアイテムを直接入手できます。これにより、時間が大幅に節約され、ゲームの効率が向上し、プレイヤーは世界の探索と構築により集中できるようになります。全体として、この機能によりゲーム体験がよりスムーズで楽しいものになります。 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

モバイルデバイスは現代社会において人々の生活に欠かせないものとなっています。ゲームはまた、人々の余暇の主要な娯楽形式の 1 つとなっています。ゲームプレイを最適化し、ゲーム体験を向上させるための新しいツールやテクノロジーの開発に常に取り組んでいる人々がいます。独自の MC コマンドによる入力方法は、目を引く革新の 1 つです。そして、それがどのようにしてプレイヤーにより良いゲーム体験をもたらすことができるのか、この記事では、組み込みの MC コマンド入力方法の無限の可能性を掘り下げていきます。内蔵 MC コマンド入力メソッドの紹介 内蔵 MC コマンド入力メソッドは、MC コマンドの機能とインテリジェントな入力メソッドを組み合わせた革新的なツールです。これにより、モバイル デバイスに入力メソッドをインストールすることで、プレイヤーはゲーム内でさまざまなコマンドを簡単に使用できるようになります。コマンドを素早く入力してゲーム効率を向上

コンピュータが直接実行できる命令の 2 つの部分は何ですか? コンピュータが直接実行できる命令の 2 つの部分は何ですか? Dec 09, 2020 am 09:15 AM

コンピュータが直接実行できる命令には、オペレーションコードとオペランドがあります。オペコードとは、コンピュータ プログラム内で操作を実行するために指定された命令またはフィールドの一部を指し、実際には命令シーケンス番号であり、どの命令を実行する必要があるかを CPU に伝えるために使用されます。

プロンプトはもう必要ありません。手だけでマルチモーダル対話システムをプレイできます。iChat が登場しました。 プロンプトはもう必要ありません。手だけでマルチモーダル対話システムをプレイできます。iChat が登場しました。 May 15, 2023 pm 05:55 PM

Xi Xiaoyao Technology は、オリジナルの作成者 | IQ が地に落ちたと述べましたが、最近、多くのチームがユーザーフレンドリーな ChatGPT に基づいて再作成しており、その多くは比較的目を引く結果をもたらしています。 InternChat の取り組みでは、マルチモーダルなタスクにおいて言語 (カーソルやジェスチャー) を超えた方法でチャットボットと対話することにより、ユーザーの使いやすさを重視しています。 InternChat という名前も興味深いもので、対話、非言語、チャットボットを表しており、iChat と呼ぶこともできます。純粋な言語に依存する既存の対話型システムとは異なり、iChat はポインティング指示を追加することにより、ユーザーとチャットボット間のコミュニケーションの効率を大幅に向上させます。さらに、作者も、

命令とはコンピュータの実行を制御する命令であり、「内容」と「アドレスコード」で構成されます。 命令とはコンピュータの実行を制御する命令であり、「内容」と「アドレスコード」で構成されます。 Jan 11, 2021 am 11:43 AM

命令とはコンピュータの実行を制御する命令であり、オペレーションコードとアドレスコードで構成されます。通常、命令にはオペレーション コードとオペランド (アドレス コード) の 2 つの側面が含まれます。オペレーション コードは完了する演算を決定し、オペランドは演算に参加するデータとそのデータが配置されているユニットのアドレスを指します。

理論的には、アプリケーション内の命令は何に分割できますか? 理論的には、アプリケーション内の命令は何に分割できますか? Dec 10, 2020 am 09:28 AM

理論的には、アプリケーション内の命令は、中央処理装置 (CPU) の命令セットと、オペレーティング システムに特定のサービスを要求するために使用される命令セットの 2 つのカテゴリに分類できます。命令とはコンピュータに特別な操作を指示するコードのことで、通常はオペレーションコードとアドレスコードで構成されます。

バブリングイベントを防ぐための指示は何ですか? バブリングイベントを防ぐための指示は何ですか? Nov 21, 2023 pm 04:14 PM

バブリング イベントを防ぐ命令には、stopPropagation()、cancelBubble 属性、event.stopPropagation()、event.cancelBubble 属性、event.stopImmediatePropagation() などが含まれます。詳細な紹介: 1. stopPropagation() は最も一般的に使用される命令の 1 つで、イベントの伝播を停止するために使用されます。イベントがトリガーされたときに、このメソッドを呼び出すと、イベントが継続できなくなる可能性があります。

See all articles