Re: Xrea / Coreserver

2012年5月11日 at 21:36

header()を追加する方法ではなく、Controllerクラスのredirectメソッドを書き換えることで解決することが分かりました。

concrete/libraries/controller.php を複製、 libraries/controller.php に設置(ユーザー領域でオーバーライドすることで、コアのアップデートに対応する方法)し、下記の通りに書き換えます。

▼修正前

public function redirect() {
$args = func_get_args();
$url = call_user_func_array(array('View', 'url'), $args);
if ($url == '') {
$url = BASE_URL . DIR_REL;
}
header("Location: " . $url);
exit;
}


▼修正後
public function redirect() {
$args = func_get_args();
$url = call_user_func_array(array('View', 'url'), $args);
if (($url == '') || ($url == "/")) { // ←ココを変更
$url = BASE_URL . DIR_REL;
}
header("Location: " . $url);
exit;
}


これでインストール時、ログアウト・ログイン時の問題は解決します。

タグ:

Re: Xrea / Coreserver

2012年5月12日 at 2:52
hissy様

いつも大変お世話になっております。nanpouです。
今回もご教示ありがとうございます。

>concrete/libraries/controller.php を複製、 libraries/controller.php に設置
>(ユーザー領域でオーバーライドすることで、コアのアップデートに対応する方法)
ここ、すごく大事ですよね。気になっておりました。ありがとうございます。

また、可能であればで結構ですので、下記ご教示いただければと思います。

1. header()を追加する方法、 || ($url == "/"))を追加する方法、
方法が全く違うのに、同じ結果になるのはなぜか?
そもそも今回のエラーの、根本的原因は何なのか? 何が悪かったのか?

2. 今回編集箇所の少し下に、「public function externalRedirect」
 という箇所があり、その中にも「header('Location: '.$url);」という記述があります。
 今回のエラーには関係無いかもしれませんが、何らかの対応をしておいた
 方が良い?のでしょうか? 今後、不具合の発生する可能性は無いのでしょうか?
 今回エラーの、根本的原因にも依ると思いますが・・・。

よろしくお願いいたします。
 

Re: Xrea / Coreserver

2012年5月12日 at 9:10
本家のフォーラムに載ってたので、ぼくもよくわかりません(^^;
要はリダイレクト先の指定がなければトップページにリダイレクトする、という処理が書かれているのですが、「リダイレクト先の指定が無い」ことをURLが空であることで判断しています。サーバーの仕様によってここがちがうんでしょうね…。

301リダイレクトだと「恒久的な移動」になってしまうので、不都合が発生することが考えられます(Googleのbotが301を見つけると、リダイレクト前のページはインデックスされなくなるなど)。

ソースを見る限りexternalRedirectメソッドには関係ないと思います。
 

Re: Xrea / Coreserver

2012年5月12日 at 14:53
早速のご回答ありがとうございます。
また、費用も掛かるのにCoreServerでの実地のご検証、恐縮しております。

いつまでも同じ問題で引きずってしまい申し訳ありませんが、2点ほどご連絡いたします。

まず1つ目、重要度の低い話・・・。
> 301リダイレクトだと「恒久的な移動」になってしまうので、不都合が発生することが考えられます
まことに仰る通りで、こちらでも事前にその点を検討いたしました。

301リダイレクトは、”Permanent Redirect”で「恒久的な転送」
(コンテンツもURLも転送先の新しい方を表示)

302リダイレクトは、”Temporary Redirect”で「一時的な転送」
(新しいコンテンツをインデックスしつつも、URLは昔の古いURLを残す)

一時的に生成されるリダイレクト用ページ?から、コンテンツページへの
移動なので、301の方が良いのでは?と判断いたしました。

それでもやはり302の方が・・・ということであれば、
header('Status: 301 Moved Permanently'); を、
header('Status: 302 Moved Temporarily'); に変更すれば良いと思います。

またどちらにしても転送元は「一時的に生成されるリダイレクト用ページ?」
に過ぎないので、301でも302でも大差無いと判断いたしました。

次に2点目。今回問題になっているRedirect機能は、先だって挙げさせて
いただいた「インストール・ログイン・ログアウト」の他に、
「ログイン後スタートページ」機能でも利用されているようです。

(以下、素人の意見なので鵜呑みにせず、再検証いただきたいのですが)
どうもhissy様にご教示いただいた方法では、「ログイン後スタートページ」機能で
リダイレクト先を「ホームページ」以外に設定した場合、正常に動作しないようです。

試しにリダイレクト先を「カスタムページ」のブログに設定してみたのですが、
メニューバーが表示されませんでした。

修正内容から考えても、上記の挙動は不思議では無い気がいたします。

誠に恐縮ではございますが、上記ご検証いただければ幸いです。
よろしくお願いいたします。