我一直在搜索關於此主題的信息幾天,並且一直跑到路障中。將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/
。