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)