6

ときどき (特に mod_rewrite が利用できない場合)、次のパス スキームが使用されることに気付きました。

http://host/path/index.php/clean_url_here
--------------------------^

これ、少なくとも Apache では機能しているようで、index.phpが呼び出され、 を/clean_url_here介してその部分を照会できます$_SERVER['PATH_INFO']。PHPは、この機能を宣伝しています。また、たとえば、CodeIgniterフレームワークは、この手法を URL のデフォルトとして使用します。

質問:この手法の信頼性は? Apache が呼び出さずindex.phpにパスを解決しようとする状況はありますか? lighttpd、nginx、IIS、AOLServer はどうですか?

ServerFault の質問ですか? PHPコード内でこの機能を使用することにもっと関係があると思います。そこでここで質問します。

補遺: VolkerK によって示唆されているように、この質問に対する合理的な拡張は次のとおり$_SERVER['PATH_INFO']です。

4

4 に答える 4

4

これは、stackoverflow と serverfault に等しく適した質問だと思います。たとえば、私が開発者として言えることは、pathinfo はユーザー入力と同じくらい信頼できるものであり (事実上何でも含むことができるということです)、Web サーバーのバージョンと構成に応じて、スクリプトがそれを受け取る場合と受け取らない場合があるということだけです。

Apache: AcceptPathInfo
IIS: たとえば、 AllowPathInfoForScriptMappingsなどなど
...

ただし、サーバー管理者は、「現実世界で」期待できる設定と、それらの設定が好まれる理由を教えてくれる可能性があります。
したがって、問題は次のようになります。あなた (または予想されるユーザーベース) は、サーバー構成にどの程度影響を与えますか。

于 2010-04-14T07:49:33.967 に答える
1

これを機能させるには、 AcceptPathInfoを有効にする必要があります。

于 2010-04-14T07:46:56.567 に答える
0

私の経験から言うPATH_INFO 、通常の Web ホスティング環境とサーバーのセットアップ (IIS であっても) で通常は利用できますが、まれに利用できない場合があります。できるだけ多くのプラットフォームにデプロイできるアプリケーションを構築する場合、ハードコーディングされたレベルで path_info を信頼することはありません。

build_url()できる限り、構成設定に応じて、次のいずれかを使用するラッパー関数を構築しようとします

  • 生の URLwww.example.com/index.php?clean_url=clean_url_here
  • path_info メカニズムwww.example.com/index.php/clean_url
  • mod_rewritewww.example.com/clean_url

アプリケーションが発行するすべての URL でそれを使用します。

于 2010-04-14T08:01:20.570 に答える
0

この URL の形式を認識しない単純なスクリプト (自動リンクなど) が存在する可能性があります。これにより、コンテンツへのリンクが作成される可能性が減少します。
これらのタスクでは自家製の正規表現パターンが一般的であるため、失敗する可能性は非常に高くなります。

技術的には、これらの URL は問題ありません。SEO的には、それらは「不完全」です。

于 2010-04-14T08:05:24.523 に答える