【问题标题】:How do I point a domain name to a Django url?如何将域名指向 Django url?
【发布时间】:2011-07-15 09:28:26
【问题描述】:

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

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

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

我还研究了 Apache 的 mod_rewrite 模块,但如果我不必将 m.example.com 重定向到 example.com/mobile,我会更喜欢

【问题讨论】:

    标签: django apache url


    【解决方案1】:

    我会避免 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)
    

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

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

    【讨论】:

    • 感谢您为我指明了正确的方向。最后,我写了一个中间件,重写了request.path_info。我确实在 github 上找到了更全面的解决方案:github.com/tkaemming/django-subdomains
    【解决方案2】:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-08-04
      • 1970-01-01
      • 1970-01-01
      • 2017-12-27
      • 2022-08-21
      • 1970-01-01
      • 2015-07-11
      • 2016-08-02
      相关资源
      最近更新 更多