目的

  • www.example.com というホスト名でアクセスして欲しい。

case1

  • IPアドレスでアクセスされた場合は望ましくないので、www.example.comにリダイレクトしたい。

case2 (Heroku)

  • Herokuでは、任意のカスタムドメインを指定することができます。
  • ただし、カスタムドメインを適用してもオリジナルのHerokuDomainも有効のままになってしまいます。
  • つまり、「example.herokuapp.com」のようなホスト名は常に有効なままになるのですが、このホスト名のアクセスは望ましくありません。
  • Herokuのドキュメントでは、アプリケーションでリダイレクトしてね、と記述があります。

対応方法

  • <projectame>/settings.py に上記middlewareを記述 (下記はlib/middleware.py とした場合の例)
MIDDLEWARE_CLASSES = [
    'lib.middleware.RedirectCorrectHostname',
...
  • <projectame>/settings.py に期待するホスト名を設定
CORRECT_HOST = 'www.example.com'  # このホスト名以外のアクセスはリダイレクトする

確認

  • curlで確認
$ curl --head http://10.0.0.1/test
HTTP/1.1 301 Moved Permanently
Location: http://www.example.com/test
...

facebook slideshare rubygems github qiita