指定 HTTP 或 HTTPS 时 Django 重定向不起作用

Django redirect not working when specifying HTTP or HTTPS

我不确定为什么会这样,但是当我在重定向中指定 HTTP 或 HTTPS 作为我的完整 URL 时,我的域名后面的部分附加到我当前的域。

例如: 如果我重定向到 https://www.external_site.com/error/page/hi_there.html it will go to https://www.currentdomain.com/error/hi_there/html

return redirect('https://www.external_site.com/error/page/hi_there.html')

但是,当我删除 https: 部分(但保留 //)时,重定向会按预期工作:

return redirect('//www.external_site.com/error/page/hi_there.html')

我使用的是 Django v 1.11.23,但也在 Django 2 上进行了测试。

Django 在 mod_wsgi 上的 Apache 上运行,并通过 IIS 反向代理(反向代理在这种情况下只是一个反向代理,除了将外部域重写为内部域之外没有任何特殊规则或任何东西域。)

我发现了问题。

与"IIS reverse rewrite host in response headers"A​​RR设置有关。我通过 "IIS Manager -> Machine or Site (I used Machine so it applies to all sites) -> Application Request Routing Cache -> Server Proxy Settings and uncheck the " 反向重写主机响应 headers" checkbox“

来禁用它

现在它正常工作了。