30 lines
1 KiB
Python
30 lines
1 KiB
Python
|
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
|
||
|
# Parse the primary hostname from WEBSITE_URL
|
||
|
self.primary_host = urlparse(settings.WEBSITE_URL).netloc
|
||
|
|
||
|
def __call__(self, request):
|
||
|
# Skip redirects in DEBUG mode
|
||
|
if settings.DEBUG:
|
||
|
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)
|