from django.conf import settings from django.http import HttpResponseRedirect from urllib.parse import urlparse class PrimaryDomainRedirectMiddleware: def __init__(self, get_response): self.get_response = get_response self.primary_host = urlparse(settings.WEBSITE_URL).netloc self.disable_redirect = settings.DISABLE_REDIRECT def __call__(self, request): if settings.DEBUG or self.disable_redirect: return self.get_response(request) # Check if the host is different from the primary host if request.get_host() != self.primary_host: # Build the redirect URL scheme = "https" # Always use HTTPS for redirects path = request.get_full_path() # Includes query string redirect_url = f"{scheme}://{self.primary_host}{path}" # Use 301 permanent redirect response = HttpResponseRedirect(redirect_url) response.status_code = 301 return response return self.get_response(request)