1374334639 IE8 javascript:location.href='...' のパス指定でエラー ( スマートなURLで )


Apache 2.2 ,PHP5.3 Codeigniter と、mod_rewrite を使用しています。
以下のようなjavascriptで飛び先を指定しています。

<input ... onclick="javascript:location.href='/controler/csv/?&name=あああ&date=20130720';">

こんなコードですが、IE7と8 で、画像のエラーが出ます。(IE9, FF , chrome などでは正常)

mod_rewrite と Codeigniterを使わずに、
<input ... onclick="javascript:location.href='method.php?&name=あああ&date=20130720';">
で飛び先をしてすると問題なくサイトを開くことができるですが。

mod_rewrite と Codeigniterは、どうしても使用しなければなりません。

location href ie8 エラー などでググっては見ましたが、自分では解決できないと
思いました。
どなたか知恵をください。お願いします。 

回答の条件
  • 1人5回まで
  • 登録:
  • 終了:2013/07/22 08:38:11
※ 有料アンケート・ポイント付き質問機能は2023年2月28日に終了しました。

ベストアンサー

id:Lhankor_Mhy No.2

回答回数814ベストアンサー獲得回数232

ポイント100pt

 そのご質問だとどうしても推測になってしまうので、ソースを見せてくれればなあ、と思います。
 
 HTMLは読み込めるが画像がリンク切れ、ということなので相対パスで参照している画像ファイルが読み込めてないような気がします。
 表示されていない画像を右クリックするなどして、どのようなパスで画像にリクエストが飛んでいるのか確認してみるというのはいかがでしょうか。
 IE7,8の表示が異なるということなので、ひょっとするとBASE要素によるものかもしれません。
 
 
 
 あと、だわかきさんの説明は間違っているような気がします。RFC違反じゃないと思いますが。

他1件のコメントを見る
id:Lhankor_Mhy

あ、そういうことでしたか。失礼しました。
どうも、URLの拡張子の影響を受けてるように感じます。CodeigniterでURLサフィックスをしてみるというのはどうでしょうか。
 
ちなみにレスポンスヘッダのContent-TypeやContent-Dispositionは正しく設定されていますでしょうか?

2013/07/21 18:14:46
id:gdwtseq

ありがとうございます。

Codeigniterの ['url_suffix'] = '.html' にして、
site_url('syouhin/csv/'.$query_string) で以下のようなパスしてにしました

<input ... onclick="javascript:location.href='https://www.mydomain.jp/index.php/syouhin/csv/urlencodeした"あああ"/20130720.html';">

しかし同じく画像のエラーダイアログで、
「www.mydomain.jp - 20130720.html をダウンロードできません。
…直してください。」
となります。

PHPによるレスポンスヘッダーは、以下を送出しています。

  header("Cache-Control: public");
  header("Pragma: public");
  header('Content-Type: application/vnd.x-excel; charset=Shift_JIS');
  header('Content-Disposition: attachment; filename="pref_' . date('YmdHis') . '.csv"');

取り急ぎの返信でした。

2013/07/21 20:38:46

その他の回答1件)

id:dawakaki No.1

回答回数797ベストアンサー獲得回数122

ポイント100pt

どのようなCodeigniterとmod_rewriteを書いているのか分かりませんけど、

/controler/csv/?&name=あああ&date=20130720

この部分の表記が RFC 1738 Uniform Resource Locators (URL) に未定義の書き方です。
ftp://ftp.isi.edu/in-notes/rfc1738.txt

?や&はファイル名の後に書かなくてはいけません。
またまた IE9, FF , chrome では動いているのでしょうが、他のブラウザでどのように動くかは保証されません。

id:gdwtseq

ありがとうございます。

わかりました。保証は無いということですね。

2013/07/21 12:52:51
id:Lhankor_Mhy No.2

回答回数814ベストアンサー獲得回数232ここでベストアンサー

ポイント100pt

 そのご質問だとどうしても推測になってしまうので、ソースを見せてくれればなあ、と思います。
 
 HTMLは読み込めるが画像がリンク切れ、ということなので相対パスで参照している画像ファイルが読み込めてないような気がします。
 表示されていない画像を右クリックするなどして、どのようなパスで画像にリクエストが飛んでいるのか確認してみるというのはいかがでしょうか。
 IE7,8の表示が異なるということなので、ひょっとするとBASE要素によるものかもしれません。
 
 
 
 あと、だわかきさんの説明は間違っているような気がします。RFC違反じゃないと思いますが。

他1件のコメントを見る
id:Lhankor_Mhy

あ、そういうことでしたか。失礼しました。
どうも、URLの拡張子の影響を受けてるように感じます。CodeigniterでURLサフィックスをしてみるというのはどうでしょうか。
 
ちなみにレスポンスヘッダのContent-TypeやContent-Dispositionは正しく設定されていますでしょうか?

2013/07/21 18:14:46
id:gdwtseq

ありがとうございます。

Codeigniterの ['url_suffix'] = '.html' にして、
site_url('syouhin/csv/'.$query_string) で以下のようなパスしてにしました

<input ... onclick="javascript:location.href='https://www.mydomain.jp/index.php/syouhin/csv/urlencodeした"あああ"/20130720.html';">

しかし同じく画像のエラーダイアログで、
「www.mydomain.jp - 20130720.html をダウンロードできません。
…直してください。」
となります。

PHPによるレスポンスヘッダーは、以下を送出しています。

  header("Cache-Control: public");
  header("Pragma: public");
  header('Content-Type: application/vnd.x-excel; charset=Shift_JIS');
  header('Content-Disposition: attachment; filename="pref_' . date('YmdHis') . '.csv"');

取り急ぎの返信でした。

2013/07/21 20:38:46
id:gdwtseq

皆様

対策しましたので取り急ぎ報告します。

試行錯誤した末、location.href='..スマートURL..' を諦め、

<a href="/syouhin/csv/?.... 

で回避することにしました。

また、IE8 には、レスポンスヘッダー"Cache-Control: public" と "Pragma: public" は、必要と思われます(釈迦に説法ですかね)。

Lhankor_Mhyさんには、とても有意義な情報を頂きましたし勉強になりました。


今回は、これで閉めさせていただきたいと思います。

本当にありがとうございました。

  • id:Lhankor_Mhy
    >だかわきさん
     本題とは関係ないのでコメント欄で。
     
    ; HTTP

    httpurl = "http://" hostport [ "/" hpath [ "?" search ]]
    hpath = hsegment *[ "/" hsegment ]
    hsegment = *[ uchar | ";" | ":" | "@" | "&" | "=" ]
    search = *[ uchar | ";" | ":" | "@" | "&" | "=" ]
     
     と書いてあるので、「?や&はファイル名の後に書かなくてはいけません」は間違いだと思いますよ。仕様に従えばhpathはヌルテキストでも問題ないはずです。
     
     なにか錯誤があればご指摘下さい。
  • id:Lhankor_Mhy
    あ、お名前間違えました。失礼しました。>だわかきさん

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

回答リクエストを送信したユーザーはいません