Adds a middleware to canonicalise the hostname
This commit is contained in:
parent
028e006d02
commit
55a10b750b
2 changed files with 25 additions and 1 deletions
|
@ -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. """
|
||||
|
||||
|
|
|
@ -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"
|
||||
|
|
Loading…
Reference in a new issue