特定リソースのみSSL接続にしたい(accessBySSLやSSLSwitcherについて)  【解決済み】

質問全般・改善要望
aki
メンバー
メンバー
記事: 56
登録日時: 2013年1月23日(水) 20:59

特定リソースのみSSL接続にしたい(accessBySSLやSSLSwitcherについて)

投稿記事by aki » 2015年8月23日(日) 15:44

いつもお世話になっております。
件名の通り、特定のリソースのみをSSL接続にしようと試みているのですが、
思うような動作にならず、お力添えいただければと思います。

【 おおまかな環境 】
MODx:1.0.14J-r9
PHP:5.3.29(モジュールモード)
MySQL:5.0.83
・独自ドメイン使用
・SSLも独自ドメインで使用できる(共用ではない)
・フレンドリーURL使用

【 サイトの作り 】
▼base要素使用
<base url="[(site_url)]">をhead要素内に記述

▼CSSと一部のJavascriptをリソースで作成している
Webフォントの指定やリセット系のCSSなど、変更がごくまれにしか起きないCSSは
assetsフォルダに格納していますが、ページ内のスタイルに関するCSSはリソースで作成しています。
Javascriptも同じく、配布されている自作でないjQuery用のプログラム等はassetsに入れていますが、
そのプログラムに対する指定(スライドショーの設定とか)部分は、リソースで作成しています。

▼ヘッダー部に各カテゴリに飛ぶためのグローバルナビゲーションあり
ナビゲーション自体はチャンク化しており、カテゴリへのリンクは<a href="[~ID~]">で指定

【 試したこと 】
1)accessBySSLを導入してみました。
https://github.com/yama/accessBySSL
こちらをダウンロードして、プラグインを作成&必要ファイルをアップロード。
パラメーターに、SSL接続にしたい「お問い合わせ」のリソースIDを入れ、追加する文字列を「https://自分のドメイン」で設定しました。

動作を確認すると、グローバルナビのお問い合わせ部分のURLが「https://~」に書き換わっており、
アクセスも正常にできます。base url も「https://~」になっており、問い合わせの送信も問題なくできました。

問題は、https://~に書き換わった「お問い合わせ」から他のカテゴリにグローバルナビで移動しようとすると、
それらのリンク先も「https://~」になってしまうことです。
https://~になるだけなら実害はありませんが、他のページは base url が http://~のままのため、
相対パスになっているCSSなどが、プロトコルの混在で(?)警告が出てページのデザインを正常に表示できません。

base url が書き換わるのだから当然の動作な気もしますが、https://~に指定していないリソースは、
常にhttp://~でアクセスしたい場合、どのように工夫すればよいでしょうか?


2)MODX_SSLSwitcherを導入してみました。
https://github.com/soushi/MODX_SSLSwitcher
検索でこちらのプラグインも見つけたので試してみました。
こちらだと、HTTPS接続に指定していないリソースに対するリンクは、http://~に置換してくれるとのことで
私の希望通りの動作だったのですが、今度はCSSとJavascriptの一部をリソースで作っていることがあだになってしまって…

グローバルナビのリンクは、お問い合わせのみ https://~、それ以外は http://~でばっちりなんですが、
お問い合わせのページに指定しているCSS等のリソースIDが、http://~に置換されるため、
1と同じくプロトコルが混在となるためか、ページのデザインが正常に表示できずにいます。

例えば、リソースのコンテントタイプが「text/css」や「text/javascript」になっているリソースは
相対パスのまま(base urlに従う)にしておく、といった感じにはできないでしょうか?


使用するのはどちらのプラグインでも良いので、お力を貸していただけたらと思います。
よろしくお願いします。
aki
メンバー
メンバー
記事: 56
登録日時: 2013年1月23日(水) 20:59

Re: 特定リソースのみSSL接続にしたい(accessBySSLやSSLSwitcherについて)

投稿記事by aki » 2015年8月23日(日) 15:57

書き込んでから、MODX_SSLSwitcherを使って、
とりあえず、CSSやJavascriptをIDでリンクするのをやめて、
直接相対パスで書いておけばいいんじゃないかと思い、やってみました。

ブラウザで、ページソースを表示させると「http://~/aaa.css」とかの絶対パスに置換されていた部分が、
ソースの上では、「aaa.css」のような相対パスになっていたのですが、だめでした。
IDでリンクしていなくても、MODx内でリソースとして作ったものがある場合は、
http://~になってしまうんですね…。
soushi
管理人
記事: 224
登録日時: 2009年7月30日(木) 01:59

Re: 特定リソースのみSSL接続にしたい(accessBySSLやSSLSwitcherについて)

投稿記事by soushi » 2015年8月25日(火) 02:54

soushiです。
SSLSwitcherを少し改造してみました。

https://github.com/soushi/MODX_SSLSwitc ... itcher.txt
(こちらはまだ未リリースの開発版です)

上記コードに上書きしつつ、テンプレート変数「SSLSwitcher」のオプションを次のように変更します。

コード: 全て選択

HTTPS利用||自動リダイレクト禁止

HTTPS利用||自動リダイレクト禁止||URL書き換え禁止


「URL書き換え禁止」にチェックを入れたリソースはSSLSwitcherのURL書き換えの影響を受けないようになります。
css等のリソースに「URL書き換え禁止」にチェックを入れることで意図した動作になるのではと思っています。

お時間があるときにでもお試しください。

また別解としてリンクしているcss等は全てhttpsページ扱いにすることでとりあえず表示できるようになりませんでしょうか。
アバター
yama
管理人
記事: 3060
登録日時: 2009年7月29日(水) 02:50

Re: 特定リソースのみSSL接続にしたい(accessBySSLやSSLSwitcherについて)

投稿記事by yama » 2015年8月25日(火) 08:59

base url が書き換わるのだから当然の動作な気もしますが、https://~に指定していないリソースは、
常にhttp://~でアクセスしたい場合、どのように工夫すればよいでしょうか?

問題はここだけですよね?jQueryやプラグインなどで動的に書き換えることもできるかもしれませんが、処理が複雑になるので、
該当部分をhttp:から始まる完全なURLで記述するのが副作用がないシンプルな解決になると思います。
他のCMSはURLを完全なURLで出力するためにこの種の問題が起きないものがほとんどなので、動的に組み立てられるナビゲーション部分などでも、MODXでもWayfinderやDittoのテンプレートを調整すれば同じように解決できると思います。
aki
メンバー
メンバー
記事: 56
登録日時: 2013年1月23日(水) 20:59

Re: 特定リソースのみSSL接続にしたい(accessBySSLやSSLSwitcherについて)

投稿記事by aki » 2015年8月25日(火) 14:31

soushiさん、yamaさん、
私のわがままな質問にご回答くださり、ありがとうございます。

>soushiさん
改造版で動作を試しましたところ、理想としていた結果を得ることができました!
本当にありがとうございます。

リンクしているcss等は全てhttpsページ扱いにすることでとりあえず表示できるようになりませんでしょうか。

す、すみません…こちらの方法でも解決できたんですね。
最初にHTTPSで接続したページが正常に読み込めなかったときにセキュリティでブロックされているようなメッセージが出てきたので、
読み込みファイルのプロトコルはアクセスされたURLのものと常に揃っていないとダメなのかと動揺してしまって
考えついていませんでした。お手間をかけてしまって申し訳ないです。

>yamaさん
アドバイスありがとうございます。
こちらに投稿後、自分なりにも何とかできないかと考えて、以下のようなコードでスニペットを作り、
base href を [(site_url)] から、[!接続判定URL!]に変えて急場をしのいでいました。

コード: 全て選択

if(isset($_SERVER['HTTPS'])) {
   echo "https://www.運用中ドメイン/";
} else {
   echo "http://www.運用中ドメイン/";
}

サーバー変数のことなどがあまりわかっていないので、こんな簡素なコードで大丈夫かな…?と思いつつ。


上記の方法だと検索エンジンが、同じページをhttp~とhttps~の両方でたどってしまい、
同じページがプロトコル違いでインデックスされてしまったり、https~ページの結果が優先される仕様(?)により、
MODx外で作っていたページの結果が落ちてしまったりと少し問題もありました。

soushiさんのプラグインで、その辺りの問題も解消されそうです。
本当にありがとうございました。
aki
メンバー
メンバー
記事: 56
登録日時: 2013年1月23日(水) 20:59

Re: 特定リソースのみSSL接続にしたい(accessBySSLやSSLSwitcherについて)

投稿記事by aki » 2015年8月25日(火) 14:59

1つご報告が抜けていました。

なぜか、管理画面にログインしているとURLの書き換え禁止が働いていないのか
CSSがソース上は相対パスですが、ソースからリンクをたどるとhttp~に繋がり、読み込めない状態になります。
ログアウトしていれば、正常に表示できているので、閲覧するユーザー様には特に問題ありません。
soushi
管理人
記事: 224
登録日時: 2009年7月30日(木) 01:59

Re: 特定リソースのみSSL接続にしたい(accessBySSLやSSLSwitcherについて)

投稿記事by soushi » 2015年8月29日(土) 15:00

soushiです。

ご連絡いただいた件ですが、jsやcssのリソース編集画面の「自動リダイレクト禁止」にチェックを入れてみたらどうでしょうか。
こちらのチェックがないと、例えば「HTTPS利用」が未チェックのリソースに対してhttpsアクセスが発生した時に勝手にhttpサイトにリダイレクトします。

少しややこしいですがHTML内のURLの書き換えとリクエストの変換の2つの機能をこのプラグインは持っています。
aki
メンバー
メンバー
記事: 56
登録日時: 2013年1月23日(水) 20:59

Re: 特定リソースのみSSL接続にしたい(accessBySSLやSSLSwitcherについて)  【解決済み】

投稿記事by aki » 2015年9月04日(金) 17:10

soushiさん、ありがとうございます。
お返事が遅れてすみません。

自動リダイレクト禁止にチェックを入れたところ、管理画面へのログイン状態に関係なく
いつでも、SSL接続したいページのみがhttps://~で、
CSSやJSは相対パスのままでbase要素のURLに従う形になりました!
自動リダイレクト禁止の使い方があまりよく分かっておらず…チェックを使ってなかったです :oops:

こちらのプラグインのおかげで、

● お問い合わせは、httpsでリンク
● その他のページは、httpでリンク
● その他のページに、httpsでアクセスがあったら、httpにリダイレクト
● リソースで作ったCSSやJSは相対パスでリンクOK

という理想どおりの動きになり、一部httpsで拾われてしまっていた検索結果もhttpに統一されました。
本当に助かりました。何度もお付き合いくださり、ありがとうございました。