■ユーザーズフォーラム リニューアルのお知らせ
新規投稿は新ユーザーズフォーラムにお願いします。

SSL接続環境でテーマ管理をしようとすると、パスにドメインが入ります

 

 1  |  2   | 次のページ>

中村 智 > SSL接続環境でテーマ管理をしようとすると、パスにドメインが入ります @ 2014/12/19 19:50
■ BaserCMSのバージョン:3.0.6.1
■ レンタルサーバー名:テコラス(エクスクラウド)ホスティングプラン EX-LITE(P)
■ OS:Centos lite 5 x86_64
■ スマートURLの利用: ON
■ 設置フォルダ: ドキュメントルート
■ 利用しているデータベース: MySQL
■ PHPスキル(自己評価): B

お世話になります。
SSL接続で管理画面にログインし、テーマ管理をクリックして、テーマ一覧に入り、デフォルトのテーマの「管理」アイコンをクリックすると、https://{domain}/{domain}/admin/theme_files/index/{テーマ名} というページに飛び、当然パスがおかしいのでNot Foundになります。

app/config/install.phpで以下の様な設定になっています。
Configure::write('BcEnv.siteUrl', 'http://{domain}/');
Configure::write('BcEnv.sslUrl', 'https://{domain}/');
Configure::write('BcApp.adminSsl', true);
※{domain}はお客様のもののため、伏せさせていただいてます(テーマ名も同様)。

また、テーマ一覧のソースを見ると、
<a href="https:/{domain}/admin/theme_files/index/{テーマ名}" title="管理"><img src="/img/admin/icn_tool_manage.png" width="24" height="24" alt="管理" class="btn" /></a>
のようになっているのですが、このアイコンにカーソルを合わせると、遷移先URLが、
https://{domain}/{domain}/admin/theme_files/index/{テーマ名}
になります。

なお、非SSL(http)の場合はこの現象は発生しません。

非常に困っていますので、なにか情報ありましたらいただけないでしょうか。
よろしくお願いします。
n1215 > Re: SSL接続環境でテーマ管理をしようとすると、パスにドメインが入ります @ 2014/12/19 20:08
中村 智 様


実URLを伏せる際には、例示用として予約されているドメイン群、具体的には
example.com example.net example.orgなどを利用していただければ暗黙の了解で伝わる人には伝わるのでわかりやすいと思います。
もし自動でリンクが貼られても害がないことが保証されます。
http://ja.wikipedia.org/wiki/Example.com


要するに、元々PHPが出力しているソースには問題がなく、
マウスホバーのタイミングでURLが不適切なものに入れ替わっているということでしょうか?
そうであればJavaScriptのコードにURLスキームがhttpsになりうることを考慮しない処理が含まれているのが原因ですよね。
これから調べてみますが、jQueryのhover, clickあたりのイベントのコールバックを洗うと良いと思います。

Twitter: @n_1215

n1215 > Re: SSL接続環境でテーマ管理をしようとすると、パスにドメインが入ります @ 2014/12/19 22:16
先ほどローカルの仮想マシンで試してみました(自己署名証明書ですが)
Configure::write('BcEnv.siteUrl', 'http://192.168.33.10/');
Configure::write('BcEnv.sslUrl', 'https://192.168.33.10/');
Configure::write('BcApp.adminSsl', true);


と設定して正常に表示されています。
管理アイコンをマウスオーバーしても変化するのは画像のファイル名に"_on"というサフィックスが付く点のみですね。

ちなみにお使いのブラウザは何でしょうか?
こちらはMac OS X Mavericks のSafariとChromeです。

Twitter: @n_1215

中村 智 > Re: SSL接続環境でテーマ管理をしようとすると、パスにドメインが入ります @ 2014/12/20 17:30
返信有難うございます。

ブラウザ環境ですが、Windows7のFirefoxとChromeです。
念のためMac OSX Mavericks のSafariとChromeとFirefoxでも確認してみました。
Macの場合、Safariでは再現しませんでしたが、ChromeとFirefoxでは再現しました。
n1215 > Re: SSL接続環境でテーマ管理をしようとすると、パスにドメインが入ります @ 2014/12/20 22:25
Firefoxも試しましたが正常ですね……。

Chromeで要素を検証しても問題のa要素にはEventListenerが1つもついておらず、
img要素にマウスオーバーした際のイベントでも影響がなさそうなので手詰まりです。

ブラウザのキャッシュなど全消去しても解決しないでしょうか?
また、テーマを変更しても症状は変わりませんか?

Twitter: @n_1215

中村 智 > Re: SSL接続環境でテーマ管理をしようとすると、パスにドメインが入ります @ 2014/12/22 9:44
検証ありがとうございます。

テーマを変更すると症状がなくなりますね。自作のテーマに問題があるのかもしれません。ただ、管理画面には手を入れていないのですが。

今のところ、原因不明で進捗なしです。
n1215 > Re: SSL接続環境でテーマ管理をしようとすると、パスにドメインが入ります @ 2014/12/22 12:32
ただ、管理画面には手を入れていないのですが。

この言葉でピンときました。
テーマ内にimg/admin, js/admin, css/adminディレクトリが残っていないでしょうか?
baesrCMS3.0.5.2までは、管理画面用のアセット(img/admin, js/admin, css/admin)が自動でテーマの中にコピーされ、
参照される仕様となっていました。

その仕様ではアセットの更新の整合性が取りにくいなどの問題があったので、3.0.6へのアップデート時に仕様が変更になり、app/webroot/以下に管理画面用アセットを配置するように変更されました。
しかし、テーマの中にimg/admin, js/admin, css/adminのディレクトリとファイルが残っているとそちらが優先して参照され、表示が崩れるなど不具合を起こすことがあります。

3.0.6へのアップデート時にテーマ内のアセットを削除する処理が入っているのですが、
例えばテーマだけ古いものをベースに使って新規インストールしたり、アップデート後にテーマを入れ替えたり、beta版からアップデートしてアップデータが作動しなかったりなどするとテーマ内に古い管理画面用アセットが残されたままになります。
https://github.com/baserproject/basercms/blob/c5a67856bc457c74ef1171f3b8c1b9dc3fecd359/lib/Baser/Config/update/3.0.6/updater.php

管理画面に手を加えていないならば、これらのディレクトリを削除していただければ修正されないでしょうか?

Twitter: @n_1215

中村 智 > Re: SSL接続環境でテーマ管理をしようとすると、パスにドメインが入ります @ 2014/12/22 13:22
色々ありがとうございます。

img/admin、css/admin、js/adminフォルダを削除したのですが、問題は解消されませんでした。
n1215 > Re: SSL接続環境でテーマ管理をしようとすると、パスにドメインが入ります @ 2014/12/24 19:59
お力になれず申し訳ないです。
テーマ固有の問題ということなら、
テーマ管理画面で読み込まれているJSに差がないか、コンソールにエラーが出ていないかを調べるくらいしかなさそうですね。

Twitter: @n_1215

中村 智 > Re: SSL接続環境でテーマ管理をしようとすると、パスにドメインが入ります @ 2014/12/25 15:59
いえ、色々とありがとうございます。

進展がありました。
とりあえず、ご指摘通りドメインをexample.comとさせていただき、またテーマ名を都合により「jsa」とさせていただきます。

私が気づかなかったのが問題なのですが、問題のHTMLソースのURLですが、https:/example.com/admin/theme_files/index/jsaとなっていました。プロトコルの後ろのスラッシュが1つしかなかったのです。
そのため、example.comの部分がパスととらえられ、https://example.com/example.com/admin/theme_files/index/jsa に遷移していました。

なぜ、https:/という中途半端なものになるのかを調べたところ、BaserCMSのURLの組み立てに問題があることがわかりました。これにはテーマ名が大きく影響しています。

BcAppHelper.phpの182行目から、以下の様な処理をしています。
if (!is_array($url) && preg_match('/\/(img|css|js|files)/', $url)) {
return $this->webroot($url);
}
(実際にはelseifが続くのですが、とりあえずここだけクローズアップします)

preg_matchの条件だと、恐らく期待しているのは/img、/css、/js、/filesなのですが、$urlに/jsが含まれていると、条件にマッチして、return $this->webroot($url);が実行されます。
この、$this->webroot()の中でごにょごにょしていて、最終的にURLの//を/に変換しています。

テーマ名が「js」で始まる場合、これにマッチしてしまいます。
https://example.com/theme_files/index/jsa
の最後の/jsaがヒットしてしまうのですね。

本来なら、ここにはヒットせずに、return parent::url($url, $full);が実行されるべきです。
つまり、BaserCMSのバグです。

preg_matchの条件は/^\/(img|css|js|files)/であるべきです。

というわけで、バグとして修正対象としていただきたいのですが、どうやって報告すればよいのでしょうか。

 

 1  |  2   | 次のページ>

ログイン
ユーザー名:
パスワード:


  新規登録 / パスワード紛失

検索

facebook
フォーラムで悩みが解決した場合など、よかったら「いいね!」をポチっとクリックしてください!質問の回答者や開発者の励みになります

フォーラムガイド


関連リンク

オンライン状況
33 人のユーザが現在オンラインです。 (31 人のユーザが フォーラム を参照しています。)

登録ユーザ: 0
ゲスト: 33