2011-03-14 138 views
0

我有一個子域m.example.com,我想指向與運行在apache2/django1.3安裝上的example.com/mobile相同的位置。如何將域名指向Django網址?

example.com是登錄頁面,我配置了urls.py,以便匹配/^mobile$/的網址將被用於網頁的移動版本。我看着<VirtualHost>,但我認爲它需要一個物理位置,我指向m.example.com與django網址和除了項目目錄的根目錄之外沒有物理位置。

我不確定配置更改是在apache方還是django方進行的。

我也進去看了mod_rewrite模塊的Apache,但我寧願如果我沒有必須m.example.com重定向到example.com/mobile

回答

4

我將避免apache重定向,只使用中間件。

通常使用中間件來獲取上下文變量,該上下文變量給出用戶正在使用的當前域。

來源:http://djangosnippets.org/snippets/1119/

class SubdomainMiddleware: 
    """ Make the subdomain publicly available to classes """ 

    def process_request(self, request): 
     domain_parts = request.get_host().split('.') 
     if (len(domain_parts) > 2): 
      subdomain = domain_parts[0] 
      if (subdomain.lower() == 'www'): 
       subdomain = None 
      domain = '.'.join(domain_parts[1:]) 
     else: 
      subdomain = None 
      domain = request.get_host() 

     request.subdomain = subdomain 
     request.domain = domain 

對你的看法,可以使用的子域和域值適當地轉換內容和邏輯。

def homepage(request): 
    if request.subdomain == 'm': 
     return movil_homepage(request) 
    else: 
     return default_homepage(request) 

你甚至可以得到裝飾者,並映射您網站上的所有視圖。

更常見的是,它只是建立第二個項目,使用相同的數據庫。隨你便。

+0

謝謝你指出我在正確的方向。最後,我寫了一個重寫request.path_info的中間件。我在github上找到了更全面的解決方案:https://github.com/tkaemming/django-subdomains – username2 2011-03-16 04:50:08

1

雖然你可以代理m.example.comexample.com/mobile,這將導致你的reverseurl功能打破。

所以解決這個問題的唯一正確方法是創建一個額外的<VirtualHost>,使用^$爲您的移動網址。