将子域指向 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_proxy
和 mod_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的主要内容,如果未能解决你的问题,请参考以下文章