Apache mod_重写重写规则错误地添加到端口AWS

Apache mod_重写重写规则错误地添加到端口AWS,apache,mod-rewrite,amazon-web-services,Apache,Mod Rewrite,Amazon Web Services,我有一个问题,我们在同一个EC2实例上运行两个系统,并使用AWS弹性负载平衡器将一个系统的请求发送到端口81 例如,我们有www.example.com和bookings.example.com,其中AWS弹性负载平衡器发送预订请求。通过端口80发送到我们的EC2盒,并通过端口81发送www.get请求 客户通过端口80连接到www.example.com,然后通过端口81从负载平衡器连接到服务器 例如,当我们将此规则添加到www站点的.htaccess时,出现了端口81的问题 RewriteR

我有一个问题,我们在同一个EC2实例上运行两个系统,并使用AWS弹性负载平衡器将一个系统的请求发送到端口81

例如,我们有www.example.com和bookings.example.com,其中AWS弹性负载平衡器发送预订请求。通过端口80发送到我们的EC2盒,并通过端口81发送www.get请求

客户通过端口80连接到www.example.com,然后通过端口81从负载平衡器连接到服务器

例如,当我们将此规则添加到www站点的.htaccess时,出现了端口81的问题

RewriteRule ^index.html / [R=301,L,QSA] !-s
#Results in customer being sent to http://www.example.com:81/
如何确保端口81没有推回给客户

我想出了这个替代方案:

RewriteRule ^index.html http://%{HTTP_HOST}/ [R=301,L,QSA] !-s

但在本例中,http是硬编码的,我需要创建该变量,以便在需要时可以使用https。我还有更多的index.html规则,可以重定向回/I我有大约30条规则,我觉得应该有一个线性程序来修复这个传递端口81返回给客户。

您的替代方案可以工作,并且可以扩展为ssl支持,但可能没有必要。Apache在创建自引用URL时遵循特定的顺序,并控制它们的创建方式,而不考虑模块(mod_rewrite、mod_alias等)

在不了解更多配置的情况下,我建议从适当的VirtualHost中的这些指令开始

UseCanonicalName On
ServerName www.example.com:80
编辑:如果您出于任何原因不想这样做,下面介绍如何修复重写以支持ssl

RewriteCond %{HTTPS} =on
RewriteRule - - [env=req_scheme=http,S=1]
RewriteRule - - [env=req_scheme=https]

RewriteRule ^index.html %{ENV:req_scheme}://%{HTTP_HOST}/ [R=301,L,QSA]

谢谢你的建议。如果服务器名行中没有硬编码的域名,我怎么做呢。我有大约50多个指向负载平衡器和这些Apache服务器的域。谢谢你的补充评论。我已经有了RewriteRule示例,但仍然希望在虚拟主机中修复它,因为这是一种更干净的处理方法。是否有任何方法可以通过虚拟主机示例支持多个域?