我们在 Joomla 中有多个网站。以下是详细信息。
- 托管于域名 mydomain.co.in、sub.mydomain.co.in。
- 位于负载均衡器后面的 Amazon EC2 实例。
- 我们已经为 *.mydomain.co.in 购买了 WildCard SSL 证书并在负载均衡器上对其进行了配置。
我已将 Joomla 配置中的 Live Site 变量设置为https://sub.mydomain.co.in. 当我使用https://sub.mydomain.co.in或者http://sub.mydomain.com,它工作正常。但我想强制所有请求都转到 https://。
我试图通过以下方式实现此目标
- 在 Joomla 配置中将强制 SSL 变量设置为整个站点。
- 在 .htaccess 中添加以下代码
RewriteEngine On RewriteCond %{HTTPS} off RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
但什么都不起作用,当我做这两个浏览器中的任何一个时都说此页面有重定向循环。我进一步挖掘了一下,看看是否有从其他地方发生的重定向。
- httpd.conf 中的虚拟主机配置
- 任何 Joomla 重定向插件。
但是没有导致重定向循环的代码/插件。
有人可以帮忙吗?
提前致谢。
答案1
您在重写条件中检查了错误的变量。
由于您使用 Amazon Elastic Load Balancer 终止您的 SSL 会话,因此您实例中的 Apache 不知道它们是通过 HTTPS 进入的,并且不会设置 HTTPS。
ELB 设置 X-Forwarded-Proto 标头或取决于请求的接收方式。您可以检查此标http
头https
,以实现重定向。
RewriteEngine on
RewriteCond %{HTTP:X-Forwarded-Proto} !https
RewriteRule .* https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]