Django 子域 - 网页有一个重定向循环
Django Subdomains - Web page has a redirect loop
我正在为用户开发这个 Django 应用程序,我希望每个用户都有自己的自定义子域。我打算为此目的使用中间件。到目前为止,这是我得到的,但是在访问该站点时(在 Google chrome 上),我收到重定向循环错误:
class SubdomainMiddleware(object):
def process_request(self, request):
if request.user.is_authenticated():
if request.company is None:
company_subdomain = request.user.company.company_url
else:
company_subdomain = request.company.company_url
company_subdomain = company_subdomain.lower()
domain_parts = request.get_host().split('.')
if len(domain_parts) > 2:
if domain_parts[0].lower() != company_subdomain:
domain_parts[0] = company_subdomain
else:
domain_parts.insert(0, company_subdomain)
domain = '.'.join(domain_parts)
return HttpResponseRedirect('http://' + domain + request.get_full_path())
else:
pass
我做错了什么?
您的第一个重定向是正确的,但随后您再次重定向,即使您在正确的域中。这导致重定向循环。您需要检查当前子域是否与预期的子域匹配,如果匹配,则 return None
而不是重定向:
if len(domain_parts) > 2:
if domain_parts[0].lower() != company_subdomain:
domain_parts[0] = company_subdomain
else: # Subdomain matches, return instead of redirect
return None
else:
domain_parts.insert(0, company_subdomain)
我正在为用户开发这个 Django 应用程序,我希望每个用户都有自己的自定义子域。我打算为此目的使用中间件。到目前为止,这是我得到的,但是在访问该站点时(在 Google chrome 上),我收到重定向循环错误:
class SubdomainMiddleware(object):
def process_request(self, request):
if request.user.is_authenticated():
if request.company is None:
company_subdomain = request.user.company.company_url
else:
company_subdomain = request.company.company_url
company_subdomain = company_subdomain.lower()
domain_parts = request.get_host().split('.')
if len(domain_parts) > 2:
if domain_parts[0].lower() != company_subdomain:
domain_parts[0] = company_subdomain
else:
domain_parts.insert(0, company_subdomain)
domain = '.'.join(domain_parts)
return HttpResponseRedirect('http://' + domain + request.get_full_path())
else:
pass
我做错了什么?
您的第一个重定向是正确的,但随后您再次重定向,即使您在正确的域中。这导致重定向循环。您需要检查当前子域是否与预期的子域匹配,如果匹配,则 return None
而不是重定向:
if len(domain_parts) > 2:
if domain_parts[0].lower() != company_subdomain:
domain_parts[0] = company_subdomain
else: # Subdomain matches, return instead of redirect
return None
else:
domain_parts.insert(0, company_subdomain)