2

Django 的PREPEND_WWW加上Common中间件自动将所有根域流量重定向到“www”。领域。我如何最好地实现相反的效果?在django下?阿帕奇?恩格尼克斯?

4

2 回答 2

3

在可能的情况下,您需要在 django 之外进行这种重定向。以下是NginxApache的说明。(您需要根据需要non-wwwwww偏好调整配置。)。

至于为什么要在django之外做,答案是性能。这里不需要让 django 处理请求和响应,因为它可以在请求生命周期的早期完成。这意味着您可以在实际需要时保存 django 进程。

您应该使用PREPEND_WWW或类似的自定义中间件的唯一原因是您无权访问服务器配置(例如某些共享托管环境)。它被用作最后的手段。

于 2013-11-15T01:00:25.923 回答
1

作为@DanielB,最好在 Django 之外执行此操作。

但是,如果您无论如何都想在 Django 中执行此操作(例如,您想学习,或者您不关心性能,或者您想测试您的测试服务器是否不使用 Apache,或者其他),那么您可以使用它我在这里找到的代码:

class RemoveWwwMiddleware():
    def process_request( self, request ):
        try:
            if request.META['HTTP_HOST'].lower().find('www.') == 0:
                from django.http import HttpResponsePermanentRedirect
                return HttpResponsePermanentRedirect(request.build_absolute_uri().replace('//www.', '//'))
        except:
            pass
于 2015-06-10T16:14:16.013 回答