2

Windows のコンソール モードで Apache 2.2.13 を実行しています。リクエストを処理する実行可能ファイルを作成しました。特定のケースでは、ディレクトリを指しているが末尾にスラッシュがない URL を検出すると、欠落しているスラッシュを追加して同じ URL にリダイレクトしようとします。exit-code は 301 に設定されています。奇妙なことに、これを応答ヘッダーに含めると機能しません。

Location: /cgi-bin/mycgi.exe/something/

しかし、これは:

Location: something/

私は何か間違ったことをしていますか?または、Apache のバグを発見しましたか? (もしそうなら、どこに、どのように投稿するのが最適ですか?)

4

2 に答える 2

2

通常、「場所」には、http: とホスト名を含む完全な URL が含まれます。これは DVK によって概説されたケースです。

場所: /cgi-bin/mycgi.exe/something/

これは実際には別のものです: 内部リダイレクトです。これはCGI 仕様で定義されており、PHP など、CGI から派生した他のサーバー環境で動作します。Location に「仮想パス」が含まれている場合、Apache はそのパスでページ/スクリプトをすぐに提供します。ブラウザは、何らかのリダイレクトがあったことを認識しません。

ブラウザが 301 であることを決して認識しない場合に 301 内部リダイレクトを行うのは意味がないため、明らかにそれはあなたが望むものではありません。

場所: 何か/

一方、これは何もありません。これは完全な URL ではなく、'/' で始まらないため仮想パスでもありません。Apache はそれをどう処理すればよいかわからないため、仮想パスではないと推測するだけで、それ以上のコメントはせずにブラウザに返します。

これを 'Location' ヘッダーでブラウザに送信することは無効ですが、多くのブラウザでは許可されているため、機能しているように見えます。実際には、完全な URL を渡す必要があります。

Location: http://www.example.com/cgi-bin/mycgi.exe/something/
于 2009-09-07T19:52:30.453 に答える
0

1) 明確にするために、リダイレクト機能 (「場所: http 応答が表示されたときに何をすべきか」など) は、Apache ではなくブラウザにあります。あなたはそれを知っていると思いますが、それが明確であることを確認したかったのです. ここで関連する理由は、RFC に従って、 301 応答のアドレスは「単一の絶対 URI」である必要があるためです。したがって、URI の例にはドメイン名がありません。たとえば、http://your.web.server/cgi-bin/mycgi.exe/something/にする必要があります。

一部の Web クライアントは相対リダイレクトで 301 を受け入れますが、他のクライアントは受け入れません。

2) クライアントのエラーと Apache のログのエラーを含めて、「動作しない」とはどういう意味かを正確に指定できますか? ありがとう

また、次の URL のうち、クライアントから機能するものと機能しないものを指定してください。

ありがとう

于 2009-09-07T18:54:18.170 に答える