ページ 12

1.0.12J WebLoginでログイン後の飛び先が404になる

Posted: 2013年11月20日(水) 11:02
by min-o
-----
ご利用のサーバ: さくらインターネット
Webサーバのバージョン :
PHPのバージョン :5.2.17
データベースのバージョン : 5.1.66-log
MODXのバージョン : 1.0.12J
ブラウザ :fierfox24
-----

お世話になっております。

■1.0.12J 「リソースの詳細情報」画面からプレビューできない
http://forum.modx.jp/viewtopic.php?f=7&t=1256
■1.0.12jウェブリンク、外部サイトからのリンクやURL直うちで指定ページが表示されない
http://forum.modx.jp/viewtopic.php?f=32&t=1261
こられの問題と関連しているのかなと思いますが…

WebLoginスニペット1.1.1 で
hogehoge.co.jp/aaa/bbb/ id50 のリソースに
[!WebLogin? &tpl=`テンプレートチャンク` &loginhomeid=`50`!]

とスニペットコールして、ウエブユーザーでログインすると
hogehoge.co.jp/aaa/bbb/aaa/bbb/ にアクセスし404になります。
ブラウザの戻るボタンで
hogehoge.co.jp/aaa/bbb/ に戻るとログインはできています。

ここからログアウトすると
hogehoge.co.jp/aaa/aaa/bbb/ にアクセスしてやはり404になります。


[!WebLogin? &tpl=`テンプレートチャンク`!]
とloginhomeid、logouthomeidを指定せず、デフォルトのカレントドキュメントにした場合も同じでした。

[!WebLogin? &tpl=`テンプレートチャンク` &loginhomeid=`51`!]
と カレント以外 hogehoge.co.jp/ccc/  id51 に指定してみても
ログイン→hogehoge.co.jp/aaa/bbb/ccc/ にとび404です。

バックアップしてある 1.0.6J-r6 では
[!WebLogin? &tpl=`テンプレートチャンク` &loginhomeid=`50`!]
のスニペットコールで問題なく50が表示されています。

よろしくお願いします。

Re: 1.0.12J WebLoginでログイン後の飛び先が404になる

Posted: 2013年11月26日(火) 12:26
by nogamihi
症状は多分、先月報告した次の私のケースと同じように思います。
MODX1.0.12JとWebLoginでURLを間違えます - <http://forum.modx.jp/viewtopic.php?f=7&t=1241>
当方では1.0.10J-r3に戻して、当面の運用中です。お役に立てずにすみません。

Re: 1.0.12J WebLoginでログイン後の飛び先が404になる

Posted: 2013年11月26日(火) 15:19
by yama
こちらの件、明日確認してみます。

Re: 1.0.12J WebLoginでログイン後の飛び先が404になる

Posted: 2013年12月06日(金) 00:26
by hk_okumura
私も 1.0.12J にバージョンアップして WebLogin の挙動が変みたいで困っています。
調べると、ベースURL が / でない場合に、問題が起きるみたいです。どこの段階で base_url を追加するか悩みどころですが、
sub.document.parser.class.inc.php の sendRedirect 関数で以下のように変更して対処しました(汗)

コード: 全て選択

***************
*** 453,459 ****
                if (substr($url, 0, strlen($base_url)) == $base_url) {
                        // append $site_url to make it work with Location:
                        $url= $site_url . substr($url, strlen($base_url));
!               }
                if (strpos($url, "\n") === false) $header= 'Location: ' . $url;
                else $modx->messageQuit('No newline allowed in redirect url.');
        }
--- 453,461 ----
                if (substr($url, 0, strlen($base_url)) == $base_url) {
                        // append $site_url to make it work with Location:                                                                                 
                        $url= $site_url . substr($url, strlen($base_url));                                                                                 
!               } elseif(strpos($url,'http') !== 0) {                                                                                                      
!                       $url = $site_url . $url;                                                                                                           
!                 }                                                                                                                                        
                if (strpos($url, "\n") === false) $header= 'Location: ' . $url;                                                                            
                else $modx->messageQuit('No newline allowed in redirect url.');                                                                            
        }         

Re: 1.0.12J WebLoginでログイン後の飛び先が404になる

Posted: 2013年12月07日(土) 15:39
by yama
すいません、この件失念してました。後ほど調べてみます。

Re: 1.0.12J WebLoginでログイン後の飛び先が404になる

Posted: 2013年12月08日(日) 21:59
by yama
weblogin.zip
(6.05 KiB) ダウンロード数: 1521 回
こちらでは再現できませんでしたが、添付のパッチを確認いただけますでしょうか。
assets/snippets/weblogin/ ディレクトリに上書きです。

Re: 1.0.12J WebLoginでログイン後の飛び先が404になる

Posted: 2013年12月09日(月) 11:42
by min-o
yamaさま
返信ありがとうございます。

添付ファイルを上書きしてみましたが、症状変わりませんでした。 :(

ちなみにbase_url は

コード: 全て選択

<base href="[(site_url)]" />
でテンプレートに記述しています。

Re: 1.0.12J WebLoginでログイン後の飛び先が404になる

Posted: 2013年12月09日(月) 12:38
by yama
http://mng.demo.modx.jp/
おそらくちょっとした違いだと思います。上記デモサイトで再現できますでしょうか?

Re: 1.0.12J WebLoginでログイン後の飛び先が404になる

Posted: 2013年12月09日(月) 13:24
by min-o
再現できました。
管理画面
http://131209130229-31246.evo.demo.modx.jp/manager/

[!WebLogin? &loginhomeid=`2` &logouthomeid=`2`!]を記述したページ id 2
http://131209130229-31246.evo.demo.modx.jp/news/
---------------
webユーザー test
パスワード  testes 
---------------
ログイン、ログアウトどちらも404になります。
テンプレートに記述しても404エラーでした。

[!WebLogin? &loginhomeid=`2` &logouthomeid=`2`!]を indexページのホームに記述した場合は
ログインは正常、ログアウトは404でした。

Re: 1.0.12J WebLoginでログイン後の飛び先が404になる

Posted: 2013年12月09日(月) 14:51
by yama
ありがとうございます。原因が分かりましたので、のちほど修正ファイルを作ります。

Re: 1.0.12J WebLoginでログイン後の飛び先が404になる

Posted: 2013年12月10日(火) 00:45
by yama
weblogin.zip
(6.05 KiB) ダウンロード数: 1330 回
このファイルを同じディレクトリに上書きしてみてください。
コアのほうも変更したほうがよさそうな気もするので、また改めてテストをお願いするかもしれません。

Re: 1.0.12J WebLoginでログイン後の飛び先が404になる  【解決済み】

Posted: 2013年12月10日(火) 11:34
by min-o
yamaさま
修正ファイルの上書きで正常に飛ぶようになりました。
ありがとうございます。 :D

>コアのほうも変更したほうがよさそうな気もするので、また改めてテストをお願いするかもしれません。
了解です。

Re: 1.0.12J WebLoginでログイン後の飛び先が404になる

Posted: 2013年12月12日(木) 17:50
by shobu
こんにちは。
横からスミマセン。別スレッドにした方が良いかと思ったのですが、関係しているかもしれませんので。。。

私のいくつかの環境を1.0.12Jに切替えた後、snippetその他、document.parser.class.inc.phpのAPI makeUrlを使用していると思われる箇所のURLの頭の/ スラッシュが取れて、相対リンク的な表記になっているのに気づきました。
元々base_url を入れていたのでブラウザでの見た目に変わりはなかったのですが、このままだとbase_urlを理解しない質の悪いクローラーが、存在しない相対リンクを深掘りして404エラーを大量生産してしまいそうなので、対策を練ろうと少し調べています。

makeUrl APIを見ていったところ、第4引数 $scheme の扱いが拡張されたようです。
まず、引数が与えられないときのデフォルトが relative になっています。また、$scheme を選別するswitchのdefault もrelativeと同じ処理を通ります。
古いmakeUrlだと結果的にですが、fullでなければ / から始まるabusoluteなURLが吐き出されていて、この環境だとこれに合わせてその他の処理がされているかと思います。

1.0.12Jだとデフォルトが relative なのですが、wayfinderなど既存snippetのなかで makeUrl の $scemeに '' と空文字を与えている箇所がいくつかあり、このようなケースでは1.0.12Jだと頭にスラッシュ無し。1.0.10だとスラッシュありになるかと思います。

この辺の挙動の変化が本トピとか別トピでの問題に絡んでいないでしょうか(スミマセン、各トピ深追いしてません)。

私の所ではとりあえずmakeUrl を書き換え、デフォルトを $scheme='abusolute' とし、swich内の処理の順番を入れ替えて scheme='' となったときも abusolute の処理が走るようにして互換性を保たせてみました。
(これはこれで別の問題も出てきましたが、本体の書き換え箇所を最小限にしたいので)

Re: 1.0.12J WebLoginでログイン後の飛び先が404になる

Posted: 2013年12月12日(木) 18:08
by yama
なるほど、デフォルトでrelativeのはずと思っていましたが勘違いでした orz
先頭にスラッシュひとつがついているabsoluteがもともとの仕様ですね。
次のリリースの準備がまだできないので、とりあえず暫定的に公開版のmakeUrl関数のデフォルトを今回はfullにしています。もともとはabsoluteですが、ほとんどのスニペットでこれで問題ないと思います。
wayfinderなど既存snippetのなかで makeUrl の $scemeに '' と空文字を与えている箇所がいくつかあり
この部分の対応は次回修正します

Re: 1.0.12J WebLoginでログイン後の飛び先が404になる

Posted: 2013年12月12日(木) 18:23
by shobu
ご対応ありがとうございます。

wayfinder その他の件ですがこれまでは$schema='' の場合、fullではない方の処理(現abs相当)が必ず走っていたわけで、今後も触らず同じようにしておいた方が既存環境に影響を与える可能性が小さいのではないでしょうか。

引き続きよろしくお願いいたします。

Re: 1.0.12J WebLoginでログイン後の飛び先が404になる

Posted: 2013年12月12日(木) 22:15
by shobu
度々スミマセン。

makeUrlの挙動をデフォルトabsにしてみたところ、元々[~数字~]になっていたところも/hogehoge/ と絶対URLの形になります。が、例えば [(site_url)][~99~] 等としていたケースで http://hogehoge.jp//fugafuga.html と/スラッシュが2重に入ってしまいます。
まだ追い切れていないのですが、1.0.12Jより前だと [~ のケースは rewriteUrls の中から呼び出される makeFriendlyURL (現廃止?) で別処理されていたみたいなのですが、 1.0.12jでは makeUrlを呼び出して処理が統一されています。
ここのmakeUrl のscheme が root_rel となっているのですが、この表記が現makeUrlにはないのでdefault:に落ちます。
結果、オリジナルのソースだと [~xx~] のケースは相対URLを返し、以前のまま。

デフォルトabsなどとして手を入れてしまうと 絶対URLが返ってきて、前述のようなケースで2重スラッシュになってしまいます。
以前の処理に合わせるならば、 rewriteUrls の途中、 $documentSource にフレンドリーURLを入れているところで

コード: 全て選択

$documentSource .= ltrim($path,'/');
などとして頭の/を取ってしまうかな、と考えています。
これにこだわっているのは tinymce の設定で fullpath使っていると、画像はもとより、リンクしてURL欄に [~xx~] と入れると保存後 /[~xx~] に置換えられます。
上記の処理をしておかないと結果的に //[~xx~] になってしまうため、ここは以前の挙動に合わせておかないと混乱の元になりそうだ、ということです。

引き続きよろしくお願いいたします。

Re: 1.0.12J WebLoginでログイン後の飛び先が404になる

Posted: 2013年12月13日(金) 09:07
by yama
ここのmakeUrl のscheme が root_rel となっているのですが、この表記が現makeUrlにはないのでdefault:に落ちます。
ここを修正するとよいのかな?と思ったのですがいかがでしょう?

Re: 1.0.12J WebLoginでログイン後の飛び先が404になる

Posted: 2013年12月13日(金) 09:33
by shobu
お返事ありがとうございます。

ご指摘の通り、 [~ の件は root_rel を relative でいいですかね(本来、 root_rel は文字列の意味的にはabsにしたかったんですよね?)。
ltrimで処理結果から削ってしまえ、と考えたのはこの root_rel をwayfinderかどこか、別の箇所でも見た覚えがあり、上記だけ修正してもダメかなと考えたのですが、よく考えるとこの件とは別ですね。
以前のバージョンとの互換性を考慮してまとめてみると、、、

★ makeUrl のデフォルト、また switch の default: はabsが良いと思います。
  サーバ名が入るfullですと、フロントとバックエンドを分けているなど、構成によっては本来隠したいサーバの別名が入り込む可能性があるためです(幾らでも工夫できますが、念のため)。
★ [~ を処理する前コメントの修正は root_rel を relative へ。これで [~xx~] のケースは以前のように相対リンクが返るようになる。
★ スニペット内その他、前verから変わっていない範囲での root_rel はmakeUrlの修正で結果的にabs的URLが戻る。
  以前はroot_relがないので結果的にabs的URLが戻ってたと思う(要確認)。この場合、ちゃんと直すならabsにすることになる。

元々、snippetなどでのオリジナルpath処理も含め、各所で戻るURLの relative、abs、full 的挙動が統一感がなかったんですよね。。。
で、各ユーザやsnippet作者はそれに合わせて自分で/付けたり取ったり何だりしていたと。
この挙動が変わると過去の資産の挙動も変わってしまう可能性があるって事だと思います。URLの問題が片付くと最近上がっている報告のいくつかは、今まで通りで勝手に解決されるのではないでしょうか。。

※私の古いいくつか偏ったバージョンの環境のみで検証しているのですが、もしかすると既に手を入れている部分があったりで、本来の動作と異なる事を言っている可能性もあります。
動作の根幹に関わる部分だと思うので、正直、他の方にも検証して頂けると嬉しいです。

Re: 1.0.12J WebLoginでログイン後の飛び先が404になる

Posted: 2013年12月13日(金) 16:55
by yama
★ makeUrl のデフォルト、また switch の default: はabsが良いと思います。
  サーバ名が入るfullですと、フロントとバックエンドを分けているなど、構成によっては本来隠したいサーバの別名が入り込む可能性があるためです(幾らでも工夫できますが、念のため)。
★ [~ を処理する前コメントの修正は root_rel を relative へ。これで [~xx~] のケースは以前のように相対リンクが返るようになる。
ありがとうございます、こちら対応します。

URLの問題は整理が必要で、そもそもMODX自体がサイト内の各ページ内で生成されるURLの形式を設定できないのが混乱の元になっているように思います。たとえばDittoとWayfinderでは生成されるURLの形式が違っていると思いますが、こういうのはシステム本体が決めるべきなんですよね。

とりあえず今のところはソースコードの整理に集中して、このへんの解決は先送りにしています。もうそろそろいいかな、という気もしますが。

Re: 1.0.12J WebLoginでログイン後の飛び先が404になる

Posted: 2014年8月21日(木) 20:03
by shobu
いつもお世話になっております。

1.0.13-r2 以降の何処かの時点で、本件で一応解決とされた、makeURL API のデフォルト値などの挙動が変わってしまったようですが、これは意図的なものでしょうか。
パラメータ無しで呼び出した際のデフォルトはずっと以前からの使用に習い abs とされたのだったと思いますが、現状は full が戻ってきてしまっているようです。