Django Admin + FORCE_SCRIPT_NAME + 登录重定向错误

Posted

技术标签:

【中文标题】Django Admin + FORCE_SCRIPT_NAME + 登录重定向错误【英文标题】:Django Admin + FORCE_SCRIPT_NAME + Login redirects incorrectly 【发布时间】:2013-10-06 20:41:45 【问题描述】:

我让 Django 在 nginx 后面运行 fastcgi_pass。我在 /django/sample 这样的子路径上运行 Django。

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

我在 Django 设置模块中使用FORCE_SCRIPT_NAME,这似乎解决了我在子路径中运行时遇到的所有问题。

在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)。同样,这解决了除了管理员登录重定向之外的所有路径问题。

这样的配置:

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

【问题讨论】:

【参考方案1】:

仅供参考,我放弃了。所有文档都说它应该很容易。但是处理起来太痛苦了。相反,我要求我们的 Django 应用程序使用子域并使用服务器设置虚拟主机。这样 Django 可以在文档根目录 "/" 运行

【讨论】:

我知道已经过了几年,但我告诉你我遇到了同样的问题。这是#$*@$(!我在开发服务器中进行了几次测试,它运行良好,但是一旦它转换到生产环境,一些链接就会开始损坏,例如重定向。这让我发疯。这应该得到了更好的发展。 我也放弃了。 serverfault.com/questions/1076763/…【参考方案2】:

FWIW,当我在使用 wsgi 的 Django 服务器前面有一个代理服务器时,我已经在另一个线程中编写了一个对我有用的解决方案。

我记得很久以前对此进行了故障排除...由于 Django 管理员设置和处理表单提交上的 next 参数的方式,您看到了不同步行为。

根据我的经验,Django 网站绝对应该使用FORCE_SCRIPT_NAME 来修改您的后端生成链接的方式,并且您的代理服务器还应该去掉路径的子文件夹(即脚本名称)部分。

另一个线程:

Host Django on subfolder

【讨论】:

以上是关于Django Admin + FORCE_SCRIPT_NAME + 登录重定向错误的主要内容,如果未能解决你的问题,请参考以下文章

django 配置管理后台,出现多个 admin/admin/admin

django1.6 admin不能登录

django 自带的admin登录页面可以换自己做的登录页面吗?

django admin能加逻辑操作吗?

django的admin界面怎么没有样式

怎么使用django里面admin的部分内容