diff --git a/pinaxcon/middleware.py b/pinaxcon/middleware.py
index f0a60b0..b70e96a 100644
--- a/pinaxcon/middleware.py
+++ b/pinaxcon/middleware.py
@@ -5,6 +5,29 @@ from django import http
 from django.conf import settings
 from django.utils.deprecation import MiddlewareMixin
 
+class CanonicalHostMiddleware(MiddlewareMixin):
+    """ Redirects to a canonical host if the current host is not the canonical
+    host. """
+
+    response_redirect_class = http.HttpResponsePermanentRedirect
+
+    def process_request(self, request):
+
+        canonical_host = getattr(settings, "CANONICAL_HOST", None)
+
+        if not canonical_host:
+            return
+
+        host = request.get_host()
+
+        if host == canonical_host:
+            return
+
+        path = request.get_full_path()
+        redirect_url = ('%s://%s%s' % (request.scheme, canonical_host, path))
+        return self.response_redirect_class(redirect_url)
+
+
 class UnprependWWWMiddleware(MiddlewareMixin):
     """ Unprepends www if necessary. """
 
diff --git a/pinaxcon/settings.py b/pinaxcon/settings.py
index d568f71..f76a65d 100644
--- a/pinaxcon/settings.py
+++ b/pinaxcon/settings.py
@@ -23,6 +23,7 @@ db_from_env = dj_database_url.config()
 DATABASES['default'].update(db_from_env)
 
 ALLOWED_HOSTS = [".localhost", ".herokuapp.com", ".northbaypython.org"]
+CANONICAL_HOST = os.environ.get("DJANGO_CANONICAL_HOST", None)
 
 # Local time zone for this installation. Choices can be found here:
 # http://en.wikipedia.org/wiki/List_of_tz_zones_by_name
@@ -134,8 +135,8 @@ MIDDLEWARE_CLASSES = [
     "reversion.middleware.RevisionMiddleware",
     "django.middleware.clickjacking.XFrameOptionsMiddleware",
     "ssl_redirect.middleware.SSLRedirectMiddleware",
+    "pinaxcon.middleware.CanonicalHostMiddleware",
     "pinaxcon.middleware.UnprependWWWMiddleware",
-
 ]
 
 ROOT_URLCONF = "pinaxcon.urls"