【问题标题】:Django app on its own subdomainDjango 应用程序在自己的子域上
【发布时间】:2013-12-24 09:07:51
【问题描述】:

我有以下目录结构:

/ (指数) /博客/ /关于/

只运行一个 Django 实例,我希望 URL 显示为 blog.domain.com(对于我的博客应用程序),但所有其他 URL 都在 (www.)domain.com/ 下运行。

我当然可以对链接进行硬编码,强制执行此设置(基本上,网络服务器将监听 blog.domain.com 并作为 domain.com/blog/ 进行转发,但用户仍会看到 blog.domain.com)但我希望能够以正确的方式解析我的 URL 配置,但仍然让它们指向 domain.com 或 blog.domain.com,具体取决于正在解析的 url(应用程序)。

有什么好的方法吗?我正在考虑使用自定义模板标签来代替 {% url my_resolve_name slug="test" as test %}

【问题讨论】:

    标签: django subdomain


    【解决方案1】:

    没有对它的内置支持,但是很多人(包括我)都以一种骇人听闻的方式完成了它。

    http://uswaretech.com/blog/2008/10/using-subdomains-with-django/
    http://uswaretech.com/django-subdomains/

    【讨论】:

    • 这将如何帮助我将我的所有博客应用程序 URL 解析为 blog.domain.com,但所有其他解析都将转到 domain.com?如果我在 blog.domain.com 所有的 url 都将被解析为 blog.domain.com 而不仅仅是博客应用相关的。
    • 好的,如果您只有两个子域,这不是最佳方式。在这种情况下,我将有两个不同的设置settings_blog,它只有博客应用程序,而 Apache 虚拟主机指向一个 wsgi 文件,其中 DJANGO_SETTINGS_MODULE 设置为 settings_blog。另一个虚拟主机响应 example.com 上的所有其他内容,并有一个 wsgi 文件,其中 DJANGO_SETTINGS_MODULE 设置为设置,其中包含所有其他应用程序。
    • 只有在我使用 Apache 时才有效,但我没有。将 nginx 和 django 作为 fastcgi 运行(尽管稍后可能会尝试 uwsgi)。
    • 我知道这条评论已经很晚了,但只是为了让其他人知道是否有其他人查看了这篇文章。 Nginx 也有这个功能。
    • 链接已失效。这就是为什么建议将解决方案复制到此处的答案。
    【解决方案2】:

    在 nginx 上试试这个:

    server { 
        listen 80;
        server_name www.example.com;
    
        if ($host ~* "^blog\.example\.com") {
            rewrite  ^(.*)$ /blog$1 permanent;
            break;
        }
    }
    

    这会将所有对 blog.example.com/some/params/ 的请求重写为 www.example.com/blog/some/params

    【讨论】:

    • 我已经搞定了。问题是让 django 将 url 解析到正确的子域。无论是博客。如果是博客应用程序或 www。如果它是指向博客应用程序的链接以外的链接。
    猜你喜欢
    • 2010-10-12
    • 1970-01-01
    • 1970-01-01
    • 2023-01-12
    • 1970-01-01
    • 2011-09-18
    • 2013-09-29
    • 2012-10-24
    • 1970-01-01
    相关资源
    最近更新 更多