3

我需要将来自的所有请求重定向www.mysite.commysite.com

在 rails 找到了解决方案,但是如何在 Django/Python 中做到这一点?

我能找到的唯一解决方案是由 GoDaddy 上的版主发布的。似乎我无法通过 GoDaddy 的 DNS 管理器解决此类问题。

4

2 回答 2

9

在 中创建自己的中间件[PROJECT_NAME]/middleware.py,如下所示:

from django.conf import settings
from django.http import HttpResponsePermanentRedirect
from django.utils.deprecation import MiddlewareMixin


class RemoveWWWMiddleware(MiddlewareMixin):
    """
    Based on the REMOVE_WWW setting, this middleware removes "www." from the
    start of any URLs.
    """
    def process_request(self, request):
        host = request.get_host()
        if settings.REMOVE_WWW and host and host.startswith('www.'):
            redirect_url = '%s://%s%s' % (
                request.scheme, host[4:], request.get_full_path()
            )
            return HttpResponsePermanentRedirect(redirect_url)

然后,在您的项目中settings.py

  • 添加REMOVE_WWW = True
  • 并添加[PROJECT_NAME].middleware.RemoveWWWMiddlewareMIDDLEWARE列表中,在 Django 的 SecurityMiddleware 之后,最好在 Django 的 Common Middleware 之前。
  • 另外,当然,请确保您没有设置PREPEND_WWW = True

该中间件基于Django 的 CommonMiddleware

于 2017-09-15T07:03:51.893 回答
0

解决了这个问题:

from django.http import HttpResponsePermanentRedirect

class WWWRedirectMiddleware(object):
    def process_request(self, request):
        if request.META['HTTP_HOST'].startswith('www.'):
            return HttpResponsePermanentRedirect('http://example.com')
于 2012-10-06T11:47:02.890 回答