Simplicityの特徴 › フォーラム › 不具合報告 › HTTP → HTTPS 化した際に遭遇した不具合について
- このトピックには6件の返信、2人の参加者があり、最後に
はせがわにより8年、 9ヶ月前に更新されました。
-
投稿者投稿
-
-
2016年4月4日 1:41 PM #38620
はせがわ
ゲストこんにちは。とあるサイトで Simplicity を利用しているものです。
● 提案
get_skin_file()
関数は HTTP でアクセスしている際は HTTP の URL を、
HTTPS でアクセスしている際は HTTPS の URL を返すように実装を修正すべき。● 背景の説明
私のサイトでは、AWS 上でリバースプロキシを含む以下の様な構成で運用しておりました。
【以前の構成】
AWS Load balancer (HTTP) -> Nginx (HTTP) -> php-fpm (WordPress)
今回、サイトの全面 HTTPS 化を行い以下の様な構成に変更しました。
【現在の構成】
AWS Load balancer (HTTPS) -> Nginx (HTTP) -> php-fpm (WordPress)
変更後、以下の
function.php
内の
get_parts_skin_file_uri()
関数内の
get_file_list()
呼び出しでエラーが起きる用になってしまいました。`
//統一パーツスキンとなるファイルの取得
function get_parts_skin_file_uri(){
//define( ‘FS_METHOD’, ‘direct’ );
define( ‘MERGED_CSS’, ‘_merged_.css’ );$skin_file = get_pearts_base_skin();
if ( !$skin_file ) return;//パーツスキンじゃないときは
$skin_arr = explode(‘/’, $skin_file);
array_pop($skin_arr);//CSSファイル名の除去
$skin_dir = implode(‘/’, $skin_arr);
//var_dump(get_theme_local_dir());
//スキンファイルをローカルパスに変換
$skin_local_file = str_replace(
get_theme_dir(),
get_theme_local_dir(),
$skin_file
);
//URLをローカルパスに変換
$skin_local_dir = str_replace(
get_theme_dir(),
get_theme_local_dir(),
$skin_dir
);
//ディレクトリ内の全てのCSSファイルを取得
//var_dump($skin_local_dir);
$all_files = get_file_list($skin_local_dir.’/’); <– ココ
//var_dump($all_files);
…`
原因を調べてみると、
get_theme_dir()
が HTTPS の URL を正しく返すのに対し、
get_pearts_base_skin()
が HTTP のアドレスを返却している状態でした。さらに
get_pearts_base_skin()
の実装を追っていくと、
get_skin_file()
関数が内部で
get_theme_mod()
を呼び出していることを見つけました。`
function get_skin_file(){
return get_theme_mod( ‘skin_file’, null );
}`
ここでデータベース上に ‘skin_file’ の値が保存されている事に気が付き、データベース上の値を直接 HTTPS の URL に書き換えることで、問題は解消されました。
さて、私のサイトの場合は完全に HTTPS のみでアクセスを許可する形に移行したため上記の対応で問題ないのですが、HTTP / HTTPS 両方受け付けるような構成 で運用する場合には本問題が引き続き発生することになります。
ベストな対策かどうかは Simplicity の全体の実装を把握していないためなんとも言えないのですが、冒頭の提案のように
get_skin_file()
の実装を修正するのが影響範囲が少ないため良いように思えます。● 環境
Simplicity バージョン: 2.0.9
(試してはいませんが、最新の 2.1.3 でも該当部分の実装は変わっていないため、同様の問題が発生するものと思われます) -
2016年4月5日 12:52 AM #38640
Hidekichi
ゲストちなみにですが、わいひらさんはhttpsの環境がないと言われていたので、こういったケースの状態を確認することができないかと思います。
httpsになっているサーバーでスキンを使えば、普通にhttpsでアドレスは返してくるので(パーツスキンは試してないですけれども)、http→https化するときの問題かつ、httpsとhttpが混在するようなケースでの話かと思いますが、誰でもそのような環境を持っているわけではないのでここまで調べられて原因を理解されているのであれば、不具合の報告だけでなく、どうすれば修正できるかの提案をしてもらう方が良いのではないかと思います。
また一部の環境でロードバランサ環境ではis_ssl()が利用できないケースもあります。
さっくりチェックができない事もあるという感じです。ここらで何かよい方法があれば、ブログ記事・github等を利用してもらってSimplicityに適用できるようにして頂けると、同じような環境で問題がある人にとってはとても有意義な提案になるかと思います。
-
2016年4月6日 12:01 PM #38718
わいひら
キーマスタースキン機能を実装した当時は、SSLのこととか全然考えてませんでした。
みてみたところ、HTTP → HTTPSしない限りは、大丈夫そうですね。
とりあえず、手元のファイルに関しては、報告に基づいた不具合箇所を修正しておきました。
次のバージョンアップで、おそらく改善されると思います。以前は、http:やhttps:を含めて設定に保存していたのですが、取り除いて保存することで解決できたと思います。
https環境用いた動作確認はできませんが、多分大丈夫と思います。多分。 -
2016年4月15日 9:57 AM #39221
はせがわ
ゲストご対応いただきありがとうございますm(__)m 次回アップデートした際に動作確認してみます。(気がつくの遅くなりました。すみません。)
-
2016年5月2日 4:11 PM #40360
はせがわ
ゲスト@わいひらさま
遅くなりましたが本日 Simpicity のバージョンアップを行いました。(v2.0.9 -> v2.1.5)
本問題に関連する部分で修正漏れがあり、エラーが発生してしまっておりましたので修正パッチを作成しました。下記の Gist にパッチを置いてありますので、次回の更新時に含めて頂けますでしょうか?
【修正内容】
–get_theme_dir()
関数はプロトコル付きの URL を返すため、get_parts_skin_file_uri()
関数内で意図しない動作となっていた。該当箇所ではremove_protocol()
を適用してプロトコルを取り除いた文字列を代わりに利用するようにした。以上、よろしくお願いいたします。
-
2016年5月2日 5:48 PM #40367
わいひら
キーマスター修正方法までありがとうございます!
simplicity2.1.6a.zipにて、修正してみました。[修正a]HTTP → HTTPS 化した際にスキンに出る不具合修正
http://wp-simplicity.com/simplicity2-1-6/もしよかったら、問題がないか確認していただけると幸いです。
-
2016年5月2日 6:42 PM #40374
はせがわ
ゲスト@わいひらさま
お早いご対応ありがとうございますm(__)m
2.1.6a にて修正が取り込まれていること、また 2.1.6a 適用後問題が発生しないことを確認出来ました。
-
-
投稿者投稿
- トピック「HTTP → HTTPS 化した際に遭遇した不具合について」には新しい返信をつけることはできません。