前言
首先:简单的端口 80 -> 端口 443 重写不会解决这个问题。几乎在之前的每个问题、邮件线程、论坛线程等中,我都发现这是第一个无知的响应,并且被重复了好几次。
其次:是的,我知道您不能在同一个端口上提供 HTTP 和 HTTPS 流量。 这不是那个。
设想:
Apache 服务器通过端口倍增托管多个站点。端口 80 服务于公共站点。端口 443 服务于该站点的安全版本。
端口 7443、8443 和 9443 分别服务于独立的 SSL 安全站点。
如果用户输错了 URL,或者给出了一个无效的链接,例如http://hostname.tld:7443,他们将看到以下可笑的页面:
而不是服务器只是将它们重定向到https://hostname.tld:7443。
我的问题是,如何以Zeus 的屁眼的名义修改 Apache 的行为或此错误消息以自动重定向用户?
Apache 显然服务于非 https 请求(以显示该错误消息),即使它是为 HTTPS 配置的。在我看来,不只是默认进行重定向似乎非常愚蠢,但我可以理解为什么他们会采用他们所做的行为,即使我不同意。所以我的问题是:你能改变它吗?他们在某个地方处理错误,并且 Apache 是配置的聚宝盆,按理说在某处有一些指令来处理这种行为,但到目前为止,我在几个小时的修补中都找不到它。
更新:
我尝试了各种各样的事情,包括:
使用
ErrorDocument 400
指令获取仅发送标头的 CGI 和 PHPStatus 301
脚本Location
。这会导致出现空白页。使用ErrorDocument 400 https://hostname.tld:7443
simply 会导致该链接显示在页面上。使用
mod_rewrite
我或谷歌所能想到的几乎所有组合,包括完全指导网站的笼统声明;这些永远行不通。从字面上看,他们什么都不做。我猜测 Apache 在尝试处理重写指令之前就开始出现上述错误。
由于自定义端口的使用,我无法使用基于端口的重定向。我不能使用基于脚本的重定向,因为它们永远不会因为 http/https 不匹配而得到服务。我几乎愿意将其归因于错误或意外行为,但有人有先见之明,在其中放置了一条非常自定义的错误消息,他们没有费心去想也许你只想购物他们已经提供了URL ?