* [携帯電話] HTTPのLocation ヘッダによるリダイレクトに失敗する [#v034017a] - 元タイトル: editによるリダイレクト -ページ: BugTrack -投稿者: [[Data]] -優先順位: 重要 -状態: 完了 -カテゴリー: プラグイン -投稿日: 2004-03-04 (木) 19:30:13 -バージョン: 1.4.2 **メッセージ [#n2c22f81] 編集の更新でeditプラグインが呼ばれますが、こいつがHTTP 304を返して表示のためのリダイレクトします。~ このときのLocationヘッダのURLが、完全修飾のURLでないため、携帯(N503i)だとリダイレクトしてくれません。~ 私は以下の修正をしましたが、適切かどうか不明です。 -header("Location: $script?".rawurlencode($post['page'])); +$url = get_script_uri(); +header("Location: ".$url."?".rawurlencode($post['page']); ---- ** ちょっと確認: [#v4b22c87] - RFC2616: Hypertext Transfer Protocol -- HTTP/1.1 -- ftp://ftp.iij.ad.jp/pub/rfc/rfc2616.txt 14.30 Location The Location response-header field is used to redirect the recipient to a location other than the Request-URI for completion of the request or identification of a new resource. For 201 (Created) responses, the Location is that of the new resource which was created by the request. For 3xx responses, the location SHOULD indicate the server's preferred URI for automatic redirection to the resource. The field value consists of a single absolute URI. Location = "Location" ":" absoluteURI ---- -RFC2616上のLocationヘッダの定義は、absoluteURI となっているので、get_script_uri()もabsoluteURIを戻すので、RFC上では問題ないと思います。あとは、ちょっと追いきれていません。 -- [[upk]] &new{2004-03-04 (木) 23:24:54}; -現在は$scriptが自動的にget_script_uri()を返すので、このバグは発生しないはずですので、完了にしておきます。 -- [[Ratbeta]] &new{2004-10-10 (日) 16:41:48}; -掘り出しありがとうございます>[[Ratbeta]] しかし残念ながら、確かに $script の生成には get_script_url() が使われるものの、keitai.ini.php には $script を短縮するためのロジックが組み込まれているため、keitaiプロファイルにおいてはこのバグは再現するでしょう。(ここにいたるまでの間に$scriptはFQDNではなくなってしまいます) -- [[henoheno]] &new{2004-10-10 (日) 18:04:18}; -ここでの問題は、自分自身を指したいというニーズが複数あって、それをコードが認識していないということですね。 -- [[henoheno]] &new{2004-10-10 (日) 18:06:06}; -原因はedit.inc.phpではなかったわけですね…。となると、他にLocationで$scriptを用いているプラグイン(amazonとpcomment?)でもこのバグが再現する訳ですね。 -- [[Ratbeta]] &new{2004-10-10 (日) 18:09:06}; -バグが発生するプラグインは上記以外でもbugtrack,newpage,rename,trackerがありますね。 -- [[Ratbeta]] &new{2004-10-10 (日) 18:13:31}; -- [[cvs:lib/func.php]] (v1.4:1.8) -- [[cvs:plugin/amazon.inc.php]] (v1.4:1.3) -- [[cvs:plugin/bugtrack.inc.php]] (v1.4:1.17) -- [[cvs:plugin/edit.inc.php]] (v1.4:1.18) -- [[cvs:plugin/newpage.inc.php]] (v1.4:1.10) -- [[cvs:plugin/pcomment.inc.php]] (v1.4:1.34) -- [[cvs:plugin/rename.inc.php]] (v1.4:1.16) -- [[cvs:plugin/tracker.inc.php]] (v1.4:1.24) -その通りです :) -- [[henoheno]] &new{2004-10-10 (日) 19:30:10}; -1) Locationヘッダを利用している箇所は get_script_uri() を呼ぶことで、常に絶対パスを用いる様に修正しました。 2) そんなにコストがかかることではありませんが、このような時に get_script_uri() は確実に複数回コールされるため、処理時間を短縮すべく、キャッシュを設けました(別の目的でコールすることもあるでしょうしね)。これで、$scriptを短縮したい、さらにindex.php という部分を削りたい、といった$scriptを改変したいというニーズとリダイレクトのニーズがバッティングすることはなくなるでしょう。 -- [[henoheno]] &new{2004-10-10 (日) 19:43:15}; -- [[cvs:lib/init.php]] (v1.4:1.12) -- [[cvs:lib/func.php]] (v1.4:1.9) -追加です。マニュアルで $script を設定している環境で get_script_url() をコールしたときにも矛盾が出ない様に修正しました。 -- [[henoheno]] &new{2004-10-11 (月) 12:14:39}; #comment