Django子域名 - 网页有一个重定向循环

时间:2015-07-23 10:38:41

标签: python django nginx gunicorn

我正在为用户开发这个django应用程序,我打算让每个用户拥有自己的自定义子域。我打算为此目的使用中间件。到目前为止,这是我得到的,但在访问该网站(在谷歌浏览器上)时,我得到重定向循环错误:

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

我做错了什么?

1 个答案:

答案 0 :(得分:0)

您的第一次重定向是正确的,但即使您位于正确的域中,您也会重新定向。这导致重定向循环。您需要检查当前子域是否与预期的子域匹配,如果匹配,则返回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)