• ベストアンサー

Location:ヘッダにネットワークパスを使うと FireFox で使えない?

OS:Windows-Xp(sp3)を使用しています。 IEは6.0、FireFoxは3.0.6を使っています。 http://sv01/cgi/downtest.cgi の位置にある、cgiを動作させたときに、そのCGIの中で、 print "Location: \\docsvr\test\data.lzh\n"; と書いてあると、 IEでは、\\docsvr\test\data.lzh ファイルのダウンロード確認画面が出てくることに対して、 FireFoxでは、HTTP 404 - ファイルが見つかりません。エラーになります。 その際、URL欄に、 http://sv01/cgi/\\docsvr\test\data.lzh のように表示されています。 FireFoxアドインの Live HTTP headersでモニタすると、 ------------------------------------------------- HTTP/1.x 301 Permanent Location: \\docsvr\test\data.lzh : と表示されますので、これは、FireFoxの仕様か設定かと思うのですが、 また、手で、FireFoxのURL欄に、 \\docsvr\test\data.lzh と書いてリターンすると、ファイルのダウンロード画面が出ますので、 CGIで実行時に、余分な、”http://sv01/cgi/”の文字を付与させなければ、良さそうなのですが、 IEと同様にファイルのダウンロード画面を呼び出させるためには、 何か方法があるでしょうか。

質問者が選んだベストアンサー

  • ベストアンサー
回答No.4

まだ閉じられていないようなので補足。 CGIの仕様(perlやphpとApacheの間で実行される規格)では Locationヘッダに対して絶対パスは文法に適合しています。 例 print "Location: /docsvr/test/data.lzh\n"; HTTPの仕様としてLocationヘッダは絶対URLでなければならないのですが、 ApacheはCGIアプリケーションからのLocationヘッダを絶対URLへの書き換えを行わないため、このときに文法違反が起こります。 そのため、CGIとしては文法に適合していても、絶対URLで出力する事をおすすめします。 スキーム名(http://やfile://など)から始まらないURLが指定された場合は、 ブラウザの独自仕様で現在のドメイン名やパスを補完するようです。

参考URL:
http://okwave.jp/qa2428571.html

その他の回答 (4)

回答No.5

訂正です。 フルパスは/docsvr/test/data.lzhではなく、 /usr/home/username/public_html/docsvr/test/data.lzh というようなパスで、 上記の/docsvr/test/data.lzhは絶対パスですね。 ついでに相対パスは./docsvr/test/data.lzhみたいな形です。 > そのため、CGIとしては文法に適合していても、絶対URLで出力する事をおすすめします。 語弊があるので訂正。 そのため、CGIの仕様にかかわらず絶対URLで出力する事をおすすめします。

回答No.3

Locationヘッダは絶対URLです。 つまりhttp://から書かないとダメです。 (絶対URLとフルパスは異なります。フルパスは/docsvr/test/data.lzh) IEの動作は独自拡張によるものだと思います。 あと、Windowsのディレクトリ指定でも/です。 ネットワークパスというのは、マイネットワークのディレクトリですかね? file:///docsvr/test/data.lzh とするか、 ネットワークドライブに割り当てて、 file:///e:/test/data.lzh などとすればアクセスできるかもしれません。

  • php504
  • ベストアンサー率42% (926/2160)
回答No.2

タイトルよく読んでませんでした ネットワークパスって書いてますね さっきの回答は無視してください

goku3
質問者

お礼

はい。ありがとうございます。 結局のところ、Location ヘッダには、 print "Location: http://~"; のような形式で書かないと、FireFoxでは正しく動いてくれないということになるでしょうか。 追加になりますが、よろしくお願いいたします。

  • php504
  • ベストアンサー率42% (926/2160)
回答No.1

'\' はまずいでしょう \testが[TAB]estになっちゃいますよ(\nが改行のように\tはタブになる) URL区切りのつもりなら'/' にしましょう。 またLocationヘッダーはフルパスのURLで書くのが本来の仕様です print "Location: http://~/docsvr/test/data.lzh\n";

goku3
質問者

補足

ご回答ありがとうございました。 また、誤解のある表現ですみませんでした。 正確には、次のような感じになっています。 $url = "\\\\docsvr\\test\\data.lzh"; : print "Location: $url\n";

関連するQ&A