我需要帮助设置 httpd.conf 文件,以便在通过 http 和 https 访问时执行重定向到同一站点

我需要帮助设置 httpd.conf 文件,以便在通过 http 和 https 访问时执行重定向到同一站点

我对 http 配置还算是个新手,所以请耐心等待(我继承了对这个系统的支持)。

我的 Web 服务器运行在 F5 后面,F5 负责处理所有 https 握手。如果传入请求是针对 http 的,F5 会将请求传递到端口 80 上的 Web 服务器。如果传入请求是针对 https 的,F5 会处理所有握手,然后将请求传递到端口 81 上的 Web 服务器。

我的 httpd.conf 文件设置为监听端口 80 和 81。为端口 81 定义了一个虚拟主机:

<VirtualHost 172.10.112.10:81>
  ServerName example.com
  DocumentRoot /usr/local/mwi/www/winxp/81
  RewriteEngine on
  RewriteCond %{REQUEST_METHOD} !^(GET|POST|HEAD)$
  RewriteRule .* - [F]
</VirtualHost>

指令“RewriteEngine on”、“DocumentRoot /usr/local/mwi/www/winxs/80”以及所有 RewriteCond 和 RewriteRule 都在虚拟主机块之外(并且不在任何其他块中),我认为它们是全局指令。

我的问题是重写规则在以下情况下正确处理http://example.com/whatever被使用,但如果请求https://example.com/whatever。该网站返回 404(页面未找到)。我昨天在 apache 网站上发现,如果存在与传入请求匹配的虚拟主机块,则会忽略全局指令。

我搜索后发现,我可以使用 htaccess 文件来实现这一点,但由于性能不佳而不建议这样做(我确实可以访问主 httpd.conf 文件)。

我是否需要为端口 80 创建一个额外的虚拟主机块并将所有重写指令移到其中?

我是否还需要将所有重写指令复制到端口 81 的虚拟主机?

我希望为两个端口仅维护一组 Rewrite 指令。如何才能最好地实现这一点?

提前致谢。

哈雷

答案1

如果您不想重复重写配置,那么您可以从外部文件中包含它:

Apache HTTP 服务器版本 2.2 中的包含文件 httpd.conf

两个独立的块,每个块包括一个重写,这可能确实是最整洁的。

答案2

JayMcTee - 谢谢。我使用了您的答案并解决了我的问题。我必须为端口 80 请求创建一个虚拟主机并删除全局重写指令。

从我对 Apache 文档的理解来看,我认为无论请求来自哪个端口,全局重写指令都会被使用。深入阅读文档后,我发现有一条声明,如果请求由虚拟主机处理,则只会使用该虚拟主机中指定的重写指令。最初,我尝试简单地复制端口 81 虚拟主机中的重写指令,但仍然有问题。然后,我为端口 80 创建了一个虚拟主机,并在两个虚拟主机中使用了 Include 指令。

问题解决了!

相关内容