18

Nginx の背後で Django を実行していfastcgi_passます。のようなサブパスで Django を実行し/django/sampleます。

location /django/sample {
    include fastcgi_params;
    fastcgi_pass 127.0.0.1:8025;
}

FORCE_SCRIPT_NAMEは Django 設定モジュールで使用します。これにより、サブパスでの実行に関して発生していたすべての問題が修正されるようです。

settings.py で:

FORCE_SCRIPT_NAME = "/django/sample/"

私はここに行き、管理者でログインします (そして、管理者 UI を正しく取得します):

http://server/django/sample/admin

しかし、送信すると、次のようにリダイレクトされます。

http://server/django/sample/django/sample/admin

本当に奇妙なのはFORCE_SCRIPT_NAME=""、ログインを変更すると機能することです。

しかし、管理ページのすべてのリンクは/admin、そうではありません/django/sample/admin/

私は一体何が欠けているのですか?設定FORCE_SCRIPT_NAME="/django/sample/"により、管理者ログインを除くすべてが修正されるようです。

何か案は?

アップデート:

また、nginx confで使用fastcgi_split_path_infoしてみました(および設定で取り出しFORCE_SCRIPT_NAMEます)。繰り返しますが、これにより、管理者ログインのリダイレクトを除くすべてのパスの問題が修正されます。

conf を次のようにします。

location /django/sample {
    fastcgi_split_path_info ^(/django/sample)(.*)$;
    include fastcgi_params;
    fastcgi_pass 127.0.0.1:8025;
}
4

2 に答える 2

9

参考までに、あきらめました。すべてのドキュメントは、それが簡単であるはずだと言っています。しかし、対処するのはあまりにも苦痛です。代わりに、Django アプリでサブドメインを使用し、サーバーで vhost をセットアップする必要があります。このようにして、Django はドキュメント ルート "/" で実行できます。

于 2013-10-18T15:01:00.207 に答える