2011-01-07 10 views
1

私はhttp://djangohost/appaddressで実行しているdjangoアプリを持っています。私はこのプロジェクトをhttp://differentaddress/appで入手したいと思います。現在、希望のアドレスでアプリを実行できますが、{% url %} templatetagsを使用すると、形式が不適切なアドレスがhttp://differentaddress/app/appaddressになります。また私が直接djangoのアプリケーションのアドレスに行くときに{% url %}のリンクは形でありますhttp://djangohost/app/appadressどうすれば変更できますか?私は、Apacheの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

は機能しますが、すべてのURLを別のタグに変更するのは面倒です。 – marks34

0

DjangoサイトをサブURLパスに「マウント」したいですか?私はすでに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 

、これが最も重要なハードコードされたサイトのURLに「/アプリ/」前に付加、それに加えて{% url something %}がにつながることを保証するためにFORCE_SCRIPT_NAMEを設定し、絶対URLは「/ app/something」です。

これは私にとってはDjangoサイトではmod_wsgiを使用し、「マウント」ではProxyPass/ProxyPassReverseを使用していました。試してみてフィードバックをください、これは一般的な解決策かどうか私は興味があります。

+0

FORCE_SCRIPT_NAMEは、mod_wsgiには決して必要ありません。 DjangoがバックエンドApache上にあった場合、フロントエンドWebサーバー経由で公開されているので、バックエンドサーバー上の同じサブURLにマウントするだけです。しかし、ログインURLの調整はまだ必要です。 –

+0

@Graham:まあ、私は数週間前にそれを試してみました。私はmod_wsgi(WSGIScriptAlias/app/path/to/wsgi.app')を使っています。正しく覚えていれば、リダイレクト(HTTP 302など)で問題が発生していました。私は、 "バックエンドApache"とは、サイトが "/"(バックエンドサーバーへの最初のApache ProxyPassing)でマウントされている2番目のApacheを意味しますか? – AndiDog

関連する問題