指定 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"ARR设置有关。我通过 "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“
来禁用它
现在它正常工作了。
我不确定为什么会这样,但是当我在重定向中指定 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"ARR设置有关。我通过 "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“
来禁用它现在它正常工作了。