• 特定のページを https に切り替える方法 htaccess を利用する#

  • dainiti Reply #1, 3 years, 4 months ago

    Reply
    WEB をさまよっているうちに偶然見つけたので自分用のメモとしてここに書きとめておくことにしました。 htaccess https をキーワードにして検索すると結構ヒットするようです。

    プラグインを使う方法とのメリットは管理画面も切り替えることができることでしょうか。管理画面はお気に入りに https:// で登録しておけばいいだけなのでたいしたメリットではありませんが。

    サンプルサイトのコンタクト画面と管理画面を https の画面に切り替える例です。
    FireFox では FCKeditor で画像が表示されない場合も有るようですがしつこくリトライしているうちに表示されるようになりました。
    IE7 でも FCKeditor で「保護されている項目とされていない項目が・・・」とか表示されて画像が表示されませんでしたがしつこく試しているうちにこのメッセージも表示されなくなり画像も表示されるようになりました。ブラウザのキャッシュが残っていたのかもしれません。

    共有SSL にも利用できますが TinyMCE が使えなくなるようです。

    .htsccess ファイルの
    RewriteEngine On
    RewriteBase /

    の下に以下の行を追加します

    RewriteCond %{REQUEST_URI} .*/contact-us.html$ [OR]
    RewriteCond %{REQUEST_URI} .*/manager/index.php$
    RewriteCond %{HTTPS} off
    RewriteRule ^(.*)$ https://%
    {HTTP_HOST}%{REQUEST_URI} [R,L]
    
    RewriteCond %{REQUEST_URI} !(.*/contact-us.html$)
    RewriteCond %{REQUEST_URI} .html$
    RewriteCond %{HTTPS} on
    RewriteRule ^(.*)$ http://%
    {HTTP_HOST}%{REQUEST_URI} [R,L]


  • dainiti Reply #2, 3 years, 4 months ago

    Reply
    共有SSL ではこの方法は使えないようです。「転送がループしています」とか表示されます。

    結局 contact-us への 次のようなウェブリンクを作って飛ばすしかないようです。
    https://ss1.coressl.jp/example.s78.coreserver.jp/contact-us.html
    この場合、htaccess はなんの変更も必要はありません。

    このとき IE7では「このページにはセキュリティーで保護されている項目と保護されていない項目が含まれています。保護されていない項目を表示しますか」にいいえを選ぶとスタイルシートが適用されない状態で表示されます。

    FireFox3 では右下に赤い (!) が表示されます。
    manager 画面では IE7、FireFox3 ともに問題なく警告は表示されません。TinyMCE が使えないことを除いては。
    https://ss1.coressl.jp/example.s78.coreserver.jp/manager

    このときの contact-us のソースを見てみると テンプレートの <base href="[(site_url)]" /> が http:// を出力しているようなのでここを
    <base href="https://ss1.coressl.jp/example.s78.coreserver.jp/" />
    のように変更してみました。この場合 SSL の警告はなくなりますがスタイルシートが適用されていない常態で表示されます。

    この辺に詳しい方がおいでましたら是非、手ほどきのほどよろしくお願いいたします。


  • soushi Reply #3, 3 years, 4 months ago

    Reply
    [(site_url)]で「http://~ 」が表示されてしまうのはMODxのキャッシュ機能のせいですね。
    キャッシュ機能を無効にしてみたらどうでしょうか…。



  • dainiti Reply #4, 3 years, 4 months ago

    Reply
    説明不足で申し訳ありません。すでにキャッシュはOFFの状態で試しております。それでもだめなんです。
    Quote from: soushi at Jan 18, 2009, 10:32 PM
    [(site_url)]で「http://~ 」が表示されてしまうのはMODxのキャッシュ機能のせいですね。
    キャッシュ機能を無効にしてみたらどうでしょうか…。

    ようやく原因がわかりました。スタイルシートをインクルードしている場合に限られるようです。原因を突き止めるため日本公式のtutorial テンプレートで試してみました。

    <linkhttps:// にしておけばウェブリンクから飛ばす必要もなくなります。

    でも modx サンプルサイトのように たくさんのインクルードが有る場合には現実的ではないですよね。共有SSL ではどうしようもないのでしょうか? でも考えてみると manager の画面でも <link rel はたくさん使われているはずだしこちらでは警告が表示されない。そのあたりを比較してみようと思います。

    他にいい方法があればまたよろしくお願いいたします。


  • dainiti Reply #5, 3 years, 4 months ago

    Reply
    manager 画面とのつくりの違いがわかりましたので報告します。

    manager 内のソースコードでは <base href= が使われていないようです。
    これを除くと <linkstylesheet" href="[(base_url)]assets/templates/tutorial/css/Style.css" />

    あぁ、すっきりした。ぐっすり眠れそう!
    共有 SSL を使っている人は参考にしてね


  • dainiti Reply #6, 3 years, 4 months ago

    Reply
    第2話 新たなる挑戦 スニペット作成
    さて、contact-us の為にテンプレートを複製するのも後々面倒なので <base href= を書き換えるスニペットの作成に挑戦してみました。まず、site_url という名前で以下のようなコードを作成。
    <?php
    $docId = $modx->documentObject['id'];
    if ($docId==6) {
       $output = '';
    } else {
       $output = $modx->config["site_url"];
    }
    return $output;
    ?>

    つぎに MODxHost テンプレートの一部を修正
    <base href="[(site_url)]"></base>
    ããããâãã¹ããããã®å¼ã³åºãã«æ¸ãæãã
    <base href="[[site_url]]"></base>

    動いた!! なんだ簡単じゃないか(^。^)y-.。o○ これで僕もエキスパートの仲間入りと思いながら一服。んで・・メニューをクリックしてみると新たな壁にぶち当たった。 リンクがすべて https://ss1.coressl.jp/modx/ ~ になっている。

    う~ん・・悩むこと1時間。Wayfinder は /modx/~ のようなパスを返すようだ。それだけじゃない Ditto まで書き換えないといけないのか? とりあえず Wayfinder のドキュメントの説明 &rowTpl を見ながら次のように付け足せばいいのかなと思いながら・・
    <li[+wf.id+][+wf.classes+]>
    	<a href="http://www.example.com[+wf.link+]"
     title="[+wf.title+]" [+wf.attributes+]>[+wf.linktext+]</a>
    	[+wf.wrapper+]
    </li>
    面倒くさいのでやめた。wf.link をフォーラムで検索。なんかよさそうな記事を発見。なんだ、さっき投稿されたばかりじゃないか。
    Wayfinderで生成される[+wf.link+]を修正したい 早速、config.inc.php を書き換え。Wayfinder も Ditto のリンクもすべて http:// になった・・万歳。

    このお話は共有SSL のためのものですが 独自ドメインの SSL でもこの方法を使ったほうがよさそうです。一番最初の htaccess を使う方法はあまりお勧めできません。