Login

PermanentRedirectMiddleware

Author:
marinho
Posted:
July 24, 2008
Language:
Python
Version:
.96
Tags:
middleware redirect permanent seo
Score:
0 (after 0 ratings)

This is a simple middleware that redirects the exactly URL requested with the correct domain. It is useful when you have more than one domain (most of cases with "www." or IP) to access a website.

To make it works, download the snippet file as the name "permanent_redirect.py" and add its path as the first item in MIDDLEWARE_CLASSES setting in settings.py.

Later you must inform a setting called HTTP_HOST_DOMAIN with the correct domain.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
from django.conf import settings
from django.http import HttpResponsePermanentRedirect

class PermanentRedirectMiddleware(object):
    def process_request(self, request):
        if hasattr(settings, 'HTTP_HOST_DOMAIN') and\
           'HTTP_HOST' in request.META and \
           request.META['HTTP_HOST'] != settings.HTTP_HOST_DOMAIN:
            return HttpResponsePermanentRedirect("http%s://%s%s"%(
                request.is_secure() and 's' or '',
                settings.HTTP_HOST_DOMAIN,
                request.get_full_path(),
                )
            )

More like this

  1. simple DomainsAliasMiddleware by matrix 6 years, 4 months ago
  2. SiteRedirectMiddleware by jezdez 6 years, 11 months ago
  3. URL redirects middleware by gonz 7 years, 7 months ago
  4. Redirect Multiple Domains to a Single Domain by rpoulton 7 years, 10 months ago
  5. Decorator to modify reverse() to render SSL urls by AndrewIngram 6 years, 3 months ago

Comments

mk (on July 25, 2008):

Here is something better for you which even works with http/https:

class ForceDomainMiddleware(object):

    def process_request(self, request):
            domain = getattr(settings, 'FORCE_DOMAIN', None)

            if not domain:
                    return

            if request.META['HTTP_HOST'] != domain:
                    target = 'http%s://%s%s' % (
                            request.is_secure() and 's' or '',
                            domain,
                            request.get_full_path())
                    return HttpResponsePermanentRedirect(target)

#

marinho (on July 29, 2008):

Fixed with mk good ideas :)

#

Please login first before commenting.