質問: pathinfoに部分的にuriエンコードされたurlが含まれている場合、apacheは404を返します (うわー、そのタイトルはひどいです...コメントで提案をするか、より良いものがあればそれを編集してください。)私は、pathinfoとしてurlを受け取り、ユーザーのipアドレスをチェックし、そのurlに直接移動するか(組織内にある場合)、プロキシ経由でurlに送信するようにリダイレクトするcgiプログラムを備えたサーバーを持っています。 (外部の場合)。 cgi自体はうまく機能しますが、apacheがスクリプトを呼び出す代わりに404 notfoundエラーを返すurlがいくつかあります。これは、uriエンコードされたパスを含むリンク先urlに関連しているようです。例えば。、 http://myserver.org/cgi-bin/ipchk/http://other.server.org/10.1007%2f3-540-28519-9_8 404を返しますが、 http://myserver.org/cgi-bin/ipchk/http://other.server.org/10.1007/3-540-28519-9_8 (同じurlですが、_%2f_が_/_にデコードされています)は正しく機能します。(起動時に_error_log_に出力することにより)404が返されたときに、ipchkスクリプトがまったく開始されていないことを確認しました。これらのエラーは間違いなくapache自体に起因するものであり、ユーザーを存在しないurlにリダイレクトするスクリプトに起因するものではありません。pathinfo-urlのエンコーディングがipchkスクリプトを見つけるapacheの機能に影響を与えるのはなぜですか?それを渡すために何をする必要がありますかall_/cgi-bin/ipchk/_ ipchkへのuriは、何が続くかに関係なく?
回答: 着信パスをチェックする前にデータを適切にデコードしないcgiコードからユーザーを保護する試みの一環として、apacheはuriエンコードされた形式のスラッシュ(%2f)またはバックスラッシュを含むurlを拒否します(404 not foundとして) (%5c)、説明されているように この記事で 。このチェックをバイパスするには、apache 2.0.46以降を使用し、apache構成で allowencodedslashes ディレクティブを有効にする必要があります。 (このディレクティブはnot.htaccessからは機能しません。サーバーまたは仮想ホストコンテキストでのみ許可されます。)