website/hub/middleware.py

29 lines
1 KiB
Python
Raw Normal View History

2025-03-03 14:39:57 +01:00
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
2025-07-16 10:18:18 +02:00
self.disable_redirect = settings.DISABLE_REDIRECT
2025-03-03 14:39:57 +01:00
def __call__(self, request):
2025-07-16 10:18:18 +02:00
if settings.DEBUG or self.disable_redirect:
2025-03-03 14:39:57 +01:00
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)