【发布时间】:2015-06-30 16:09:32
【问题描述】:
几天来,我一直在搜索有关此主题的信息,但一直遇到障碍。
我有一个 Django 网站和应用程序在 www.example.com 上运行,我正在强制使用 HTTPS。它部署在带有 WSGI 的 Apache 2.2 上。这工作正常,适用于 example.com 和 www.example.com。
我还有一个在 https://www.example.com/api/v1/ 运行的 REST API (pip install djangorestframework)。这也很好用。
我想从子域 https://api.example.com 运行 API,并将此 URL 保留在地址栏中。例如,要获取 JSON 对象,我可能会使用如下内容:
curl -X GET https://api.example.com/objects/ -H 'Authorization: Token xxx'
我现在可以用这个得到这个:
curl -X GET https://www.example.com/api/v1/objects/ -H 'Authorization: Token xxx'
我有一个单独的 SSL 证书用于这个子域,并且他的配置正确。
我在我的 Apache 配置中尝试了很多方法来实现这一点,但每次都失败了。我想我可以使用mod_rewrite 静默地从https://www.example.com/api/v1/ 获取内容,同时将https://api.example.com 留在地址栏中。这可能吗?这是我尝试过的(在sites-available 虚拟主机文件中):
RewriteEngine on
RewriteCond %{HTTP_HOST} ^api.example.com [NC]
RewriteRule ^(.*)$ https://www.example.com/api/v1/$1 [L]
我已经尝试了这个想法的几种变体,但都无济于事。我也玩过HTTPS on/off 并没有真正的好处。
我读了几个地方,使用 mod_proxy 可以实现这一点,但是当我走这条路时,API 在所需的 URL (https://api.example.com) 上可用(经过相当多的调整),但我的静态内容在那里,当我单击 Django REST Framework UI 中的相对链接时,我会得到 404,因为它正在查看:
https://api.example.com/api/v1/
Django 抱怨的:/api/v1/api/v1/
我想我要做的只是将https://api.example.com 设为 API 的基本 URL,就好像它是 https://www.example.com/api/v1/。
【问题讨论】:
标签: django mod-rewrite django-rest-framework subdomain