实现与PREPEND_WWW相反的最佳方式(例如,从" www"重定向到根域)?

时间:2013-11-15 00:37:20

标签: django apache nginx

Django的 PREPEND_WWW 以及 Common 中间件会自动将所有根域流量重定向到“www”。域。我如何最好地实现相反的目标?在django下? Apache的? Ngnix?

2 个答案:

答案 0 :(得分:3)

在可能的情况下,您可能希望在django之外进行此类重定向。以下是NginxApache的说明。 (您需要根据所需的non-wwwwww权限调整配置。)。

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

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

答案 1 :(得分:1)

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

但是如果你想在Django中做这件事(例如你想学习,或者你不关心性能,或者你想测试你的测试服务器是否不使用Apache,或者其他),那么你可以使用我找到here的代码:

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