2012-10-06 43 views
1

我需要從www.mysite.com的所有請求重定向到mysite.comHeroku Django:重定向www的所有請求。以根域

我已經找到了solution in rails,但我怎麼能做到這一點在Django/Python的?

我可以罰款的唯一解決方案,由GoDaddy上的版主發佈的就是上述內容。好像我無法通過GoDaddy的DNS管理器解決這類問題。

任何提示或想法?

在此先感謝。

回答

1

解決白衣這樣的:

from django.http import HttpResponsePermanentRedirect 

class WWWRedirectMiddleware(object): 
    def process_request(self, request): 
     if request.META['HTTP_HOST'].startswith('www.'): 
      return HttpResponsePermanentRedirect('http://mysite.com') 
+0

如果你還運行本地開發服務器,你將如何使用它? – Alper

+1

@alper使用一個如果不是DEBUG的例子 – 1ronmat

2

[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's CommonMiddleware

相關問題