(うわー、そのタイトルはひどいです...コメントで提案をするか、より良いものがあればそれを編集してください。)
私は、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
からは機能しません。サーバーまたは仮想ホストコンテキストでのみ許可されます。)