如何将域名指向Django网址?

时间:2011-03-14 22:34:06

标签: django apache url

我有一个子域m.example.com,我希望指向与在apache2 / django1.3安装上运行的example.com/mobile相同的位置。

example.com是目标网页,我配置了urls.py,以便匹配/^mobile$/的网址将提供给该网页的移动版本。我调查了<VirtualHost>,但我认为它需要一个物理位置让我指向m.example.com和django网址,除了项目目录的根目录之外没有物理位置。

我不确定配置是在apache端还是django端进行更改。

我也查看了Apache的mod_rewrite模块,但我更希望如果我不必将m.example.com重定向到example.com/mobile

2 个答案:

答案 0 :(得分: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)

您甚至可以获取装饰者,并在您的网站上映射所有视图。

更常见的是,它只是构建第二个使用相同数据库的项目。这取决于你。

答案 1 :(得分:1)

虽然您可以将m.example.com代理到example.com/mobile,但这会导致您的reverseurl功能中断。

因此,解决此问题的唯一正确方法是为您的移动网址创建一个使用<VirtualHost>的额外^$