2011-01-07 51 views
1

我有一個在http://djangohost/appaddress上運行的django應用程序。我希望該項目在http://differentaddress/app處提供。目前,我可以在所需的地址運行應用程序,但使用{% url %}模板標籤以http://differentaddress/app/appaddress的形式給我提供了不正確的地址。另外,當我直接去django應用程序地址,所有{% url %}鏈接的形式http://djangohost/app/appadress我該如何改變?我在阿帕奇的conf這些入口:Django/Apache地址問題

ProxyPass /app/ http://djangohost/appaddress/ 
ProxyPassReverse /app/ http://djangohost/appaddress/ 
+1

你怎麼真的在運行Django? mod_python,mod_wsgi? –

回答

0

也許不是一個適當的解決方案,但仍然有一些解決方法的問題,而不會干擾Apache的設置。使用mod_msgi進行測試,它就像一個魅力。以下是鏈接: http://fromzerotocodehero.blogspot.com/2011/01/using-proxypass-with-django-project.html。基本上我已經在這裏創建自定義urlc temlpatetag覆蓋url函數。在標記代碼中,我添加了用空符號替換第一次發生不需要的應用程序名稱的行。

+1

的作品,但將所有網址更改爲不同的標籤是乏味的。 – marks34

0

因此,您想要在子URL路徑上「裝載」Django站點嗎?我已經用Apache和mod_proxy試過了,這是一個噩夢發現。以下是我想出了(可能不完整或不完美):

# In your scenario 
FORCE_SCRIPT_NAME = "/app/" 

# End of settings 
_prefix = (FORCE_SCRIPT_NAME or "") 
LOGIN_URL   = _prefix + LOGIN_URL 
LOGIN_REDIRECT_URL = _prefix + LOGIN_REDIRECT_URL 
LOGOUT_URL   = _prefix + LOGOUT_URL 
ADMIN_MEDIA_PREFIX = _prefix + ADMIN_MEDIA_PREFIX 

顯然,這種預規劃「/應用程序/」最重要的硬編碼的網站的網址,再加上它設置FORCE_SCRIPT_NAME確保{% url something %}將導致例如,「/ app/something」的絕對URL。

這對Django站點使用mod_wsgi,對於「安裝」使用ProxyPass/ProxyPassReverse。試試看,並給我反饋,我很感興趣,這是否是一個通用的解決方案。

+0

mod_wsgi永遠不需要FORCE_SCRIPT_NAME。如果Django位於後端Apache上,那麼它應該安裝在後端服務器上的相同子URL上,因爲它是通過前端Web服務器發佈的。儘管如此,登錄URL調整仍然是需要的。 –

+0

@格拉漢姆:好吧,幾周前我試了一下,遇到了麻煩。如上所述,我使用mod_wsgi(àla'WSGIScriptAlias/app/path/to/wsgi.app')。如果我沒有記錯,問題是重定向(例如HTTP 302)。我猜,通過「後端Apache」,你的意思是第二個Apache站點安裝在「/」(第一個Apache ProxyPass-後端服務器)上? – AndiDog