私の Web ホストはこれについて私を助けることを拒否したので、私はここの賢明な人々に「ブラックボックスのデバッグ」の助けを求めています。以下は、私が彼らに送ったものの編集版です。
私はdreamhostに2つの(とりわけ)ドメインを持っています:
1) thefigtrees.net 2) shouldivoteformccain.com
#1 で CGI スクリプトをホストすると、CGI スクリプトが実行されるまでに、QUERY_STRING 環境変数として渡された HTTP GET クエリ文字列が既に URL デコードされていることに気付きました。これは、標準の CGI ライブラリ (perl の CGI.pm など) がアンパサンドで分割し、文字列自体をデコードしようとすることを意味するため、問題です。これには 2 つの潜在的な問題があります。
1) 文字列は二重にデコードされるため、「%2525」などの値がスクリプトに送信されると、「%25」(1 回デコード) ではなく、単に「%」(2 回デコード) として扱われることになります。
2) (より一般的) 送信された値にアンパサンドがある場合、(適切に) %26 として送信されますが、QUERY_STRING env. 変数はすでに "&" にデコードされており、CGI ライブラリはそのアンパサンドでクエリ文字列を不適切に分割します。これは大問題です!
http://thefigtrees.net/test.cgiのスクリプトはこれを示しています。呼び出された環境変数をエコー バックします。ブラウザで次の場所に移動します。
http://thefigtrees.net/lee/test.cgi?x=y%26z
REQUEST_URI には x=y%26z (エンコードされていない) が正しく含まれていますが、QUERY_STRING には既に x=y&z にデコードされていることがわかります。ドメイン #2 ( http://www.shouldivoteformccain.com/test.cgi?x=y%26z ) でテストを繰り返すと、QUERY_STRING がデコードされないままであるため、CGI.pm が分割され、正しくデコードされることがわかります。
問題がないことを確認するために、両方の .htaccess ファイルを無効にしてみましたが、違いはありませんでした。
私の Web ホストは私を助けたがらないように見えるので、誰かがこれの潜在的な原因を推測できますか?
ありがとう、リー