将子域指向 Django 中的特定 url

Posted

技术标签:

【中文标题】将子域指向 Django 中的特定 url【英文标题】:Pointing subdomain to specific url in Django 【发布时间】:2011-08-04 16:11:48 【问题描述】:

我有一个 Django 站点,在 mod_wsgi 和 Apache 上工作。 (例如,example.com) 我创建了一个子域(例如,info.example.com)并希望将其指向现有项目中的应用程序。是否有可能,我有一个 urls.py 文件,并且 example.com/info 和 info.example.com 指向 Django 项目中的同一个视图(无需将整个项目复制到不同的目录中)?

如果是这样,我该怎么做?目前,现有项目的 example.com virtalhost 配置如下所示:

<VirtualHost 12.34.56.78:80>
   ServerName example.com
   ServerAlias www.example.com

   DocumentRoot /srv/www/Example/Pub_html

   WSGIScriptAlias / /srv/www/Example/example.wsgi
   <Directory /srv/www/Example/Example>
      Order allow,deny
      Allow from all
   </Directory>

   Alias /robots.txt /srv/www/Example/robots.txt
   Alias /favicon.ico /srv/www/Example/favicon.ico
   ....
</VirtualHost>

提前致谢!

更新:我在这里做了一个快速修复,创建了另一个与现有项目共享数据库表和模板文件夹的 Django 项目。它有效,但它并不是真的干燥:)

【问题讨论】:

您可能想要添加一个 RewriteRule,它将在内部将 info.example.com 转换为 example.com/info。不过,这些都是出了名的难写。 【参考方案1】:

我想我会使用反向代理来执行此操作。如果您有 mod_proxymod_proxy_html 可用,请尝试以下操作:

<VirtualHost 12.34.56.78:80>
    ServerName info.example.com

    ProxyPass       /  http://example.com/info

    SetOutputFilter proxy-html
    <Location />
        ProxyPassReverse /info/
        ProxyHTMLURLMap /info/ /
    </Location>
    ProxyHTMLURLMap http://example.com/info /
</VirtualHost>

细节可能不太正确,所以如果你不能让它工作,请告诉我。

【讨论】:

我只使用了 ProxyPass 线。使用完整文件,它在谷歌浏览器中抛出错误 330,我有 [error] proxy: ap_get_scoreboard_lb(1) failed in child 14565 for worker proxy:reverse; [错误] 代理:ap_get_scoreboard_lb(0) 在子 14565 中为工人 example.com/info 失败

以上是关于将子域指向 Django 中的特定 url的主要内容,如果未能解决你的问题,请参考以下文章

从 foo.bar.car.com 中的 URL 获取特定子域

通过 Apache 将子域指向另一个 IP

使用 DNS 将子域重定向到特定 url

内部链接仍然指向开发子域?

.htpasswd 在特定子域上

特定子域的 Apache 反向代理