Django的 PREPEND_WWW 以及 Common 中间件会自动将所有根域流量重定向到“www”。域。我如何最好地实现相反的目标?在django下? Apache的? Ngnix?
答案 0 :(得分:3)
在可能的情况下,您可能希望在django之外进行此类重定向。以下是Nginx和Apache的说明。 (您需要根据所需的non-www
或www
权限调整配置。)。
至于为什么要在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