我一直在搜索关于此主题的信息几天,并且一直跑到路障中。将Django REST API部署到api.example.com:Apache 2.2,mod_wsgi和mod_rewrite
我有一个Django网站和应用程序运行在www.example.com
,我强制HTTPS。它使用WSGI部署在Apache 2.2上。这工作正常,适用于example.com
和www.example.com
。
我也有一个REST API(pip install djangorestframework
)运行在https://www.example.com/api/v1/
。这也很好。
我想从子域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'
我对这个subdmain一个单独的SSL证书,他一直正确配置。
我已经在我的Apache配置中尝试了很多事情来完成这个任务,但每次都失败了。我以为我可以使用mod_rewrite
在https://api.example.com
的地址栏中静默获取https://www.example.com/api/v1/
的内容。这可能吗?这里是我试过什么(在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框架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/
。