モノラルログ

マツオ ( @matsuoshi / monaural.net ) のざっくりしたブログです

http と https の領域を、.htaccess の設定で行ったり来たりさせる (2)

前回のメモの続きです。

http ←→ https (SSL) の行ったり来たりを .htaccess のリダイレクトの設定だけでなんとかする方法、http と https の領域が同じパターン編。

前提

  • http と https とで、ファイルを置く領域が同一のとき
  • /secure と /contact フォルダは https でアクセスさせたい
  • /common フォルダはどちらからでもアクセスできるようにしたい
  • その他は http でアクセスさせたい

.htaccess

RewriteCond %{HTTPS} on
RewriteCond %{REQUEST_URI} !^/secure/
RewriteCond %{REQUEST_URI} !^/contact/
RewriteCond %{REQUEST_URI} !^/common/
# CakePHP向け ここから
RewriteCond %{REQUEST_URI} !^/index.php
RewriteCond %{REQUEST_URI} !^/debug_kit/
# CakePHP向け ここまで
RewriteRule ^.*$ http://%{HTTP_HOST}%{REQUEST_URI} [R,L]
RewriteCond %{HTTPS} off
RewriteCond %{REQUEST_URI} ^/secure/ [OR]
RewriteCond %{REQUEST_URI} ^/contact/
RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [R,L]

これで、

  • 通常のページはhttpsでアクセスしようとしてもhttpにリダイレクトされる
  • /secure/ と /contact/ は http でアクセスしようとしても https にリダイレクトされる
  • /common/ は http からでも https からでもリダイレクトされない

という設定になります。

http と https の領域を、.htaccess の設定で行ったり来たりさせる (1)

メモです。

フォームなどは SSL でアクセスさせたい、通常のページはhttpで、でも共通で使う画像などもありますよ、というとき、.htaccess のリダイレクトの設定だけでなんとかする方法。

前提

  • http と https では、ファイルを置く領域が異なるとき
  • /secure と /contact フォルダは https でアクセスさせたい
  • /common フォルダはどちらからでもアクセスできるようにしたい
  • その他は http でアクセスさせたい

http 側の .htaccess

RewriteCond %{REQUEST_URI} ^/secure/ [OR]
RewriteCond %{REQUEST_URI} ^/contact/
RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [R,L]

https 側の .htaccess

RewriteCond %{REQUEST_URI} !^/secure/
RewriteCond %{REQUEST_URI} !^/contact/
RewriteCond %{REQUEST_URI} !^/common/
# CakePHP向け ここから
RewriteCond %{REQUEST_URI} !^/index.php
RewriteCond %{REQUEST_URI} !^/debug_kit/
# CakePHP向け ここまで
RewriteRule ^.*$ http://%{HTTP_HOST}%{REQUEST_URI} [R,L]

これで、

  • 通常のページはhttpsでアクセスしようとしてもhttpにリダイレクトされる
  • /secure/ と /contact/ は http でアクセスしようとしても https にリダイレクトされる
  • /common/ は http からでも https からでもリダイレクトされない

という設定になります。

なお、http と https とで領域が同じ場合の方法は、こちら

CakePHP + PHPUnit でのテストで、例外を判定

CakePHP のコントローラでのテストで、たとえば 404エラーが発生することを確認するためのテストコードの例です。

<?php
    App::uses('PostsController', 'Controller');

    class PostsControllerTest extends ControllerTestCase
    {
        public $fixtures = array(
            'app.posts',
        );

        public function test存在しないIDはNotFound()
        {
        // 404 Not Found が発生することを期待
        $this->setExpectedException('NotFoundException');

        // コントローラにアクセス
        $this->testAction("/posts/detail/99999999");
        }
    }

PHPUnit の $this->setExpectedException() を使います。

PHP で メールアドレスの形式を一発でチェックする

メールアドレスのチェックは面倒ですが、実はPHP標準の関数で、メールアドレスが正しい形式かどうか一発でチェックできるみたいです。

if (filter_var($address, FILTER_VALIDATE_EMAIL)) {
    return true;
}

これだけ。

日本の携帯メールアドレスがRFCに準拠していない問題もあるので万能ではないと思いますが、なかなか便利なのでは…! (PHP 5.2.0以降で対応)

Tumblr のテーマに、投稿者名とアイコンを表示する

Tumblr は複数人で1つのブログを更新していけるんですが、デフォルトのテーマだと投稿者名が表示されないので誰が更新したのかわかりません。 というわけで、投稿者名を表示できるようにテーマをいじったメモ。

http://www.tumblr.com/docs/ja/localizing_themes

ここにテンプレートタグはおおよそ掲載されていますが、投稿者名だけを表示したい場合は {PostAuthorName} でいいみたいです。

投稿者のアイコンを表示したい場合は、このページには載っていないのですが {PostAuthorPortraitURL-24} でいけました。

ということで、こんな感じのコードをテンプレートに追加。

<p class="author">by {PostAuthorName} <img src="{PostAuthorPortraitURL-24}" /></p>

以上メモでした。