Apache HTTPS/非 WWW 重定向

Apache HTTPS/非 WWW 重定向

我想将我的所有网络流量重定向到 https://example.com

到目前为止我已经拥有了一切除了https:www.example.com 重定向错误

这是我的虚拟主机配置文件的样子

<VirtualHost _default_:80>
  DocumentRoot "/opt/bitnami/apache2/htdocs"
  RewriteEngine On
  RewriteCond %{HTTPS} !=on
  RewriteRule ^/(.*) https://example.com/ [R,L]
  RewriteCond %{HTTPS_HOST} ^https://www.example.com [NC]
  RewriteRule ^/(.*) https://example.com/ [R,L]
  <Directory "/opt/bitnami/apache2/htdocs">
  ........

唯一不重定向的网站是

https://www.example.com

我错过了什么?

答案1

正如 Thomas 所说,您想使用HTTP_HOST。而且您的信息是多余的,甚至没有用。此外,您将端口 80 重定向到 443,这意味着HTTPS无论如何都将关闭(未设置)。并且要重定向到端口 443,您需要在 443 定义中进行重定向。

# http://... to https://...
<VirtualHost _default_:80>
  DocumentRoot "/opt/bitnami/apache2/htdocs"
  RewriteEngine On
  RewriteRule ^/(.*) https://example.com/$1 [R,L]
  ...
</VirtualHost>

# https://www.example.com -> https://example.com
<VirtualHost _default_:443>
  DocumentRoot "/opt/bitnami/apache2/htdocs"
  RewriteEngine On
  RewriteCond %{HTTP_HOST} ^www\.example\.com [NC]
  RewriteRule ^/(.*) https://example.com/$1 [R,L]
  ...
</VirtualHost>

您可能还希望$1在重定向时不会丢失路径。

正如托马斯提到的,\.这是一个好主意,否则你最终可能会匹配超过预期(对于主持人来说,这种情况不太可能发生......)

答案2

HTTPS_HOST据我所知不存在,你想要HTTP_HOST。此外,HTTP_HOST变量不包括方案。

此外,尽管从技术上讲它仍然有效,但您可能希望转义.'s(替换除外RewriteRule),因为它们在正则表达式上下文中具有特殊含义(表示“任何字符”)。当然,点也可以定义为任何性格,这仍然是一个很好的练习。

<VirtualHost _default_:80>
  DocumentRoot "/opt/bitnami/apache2/htdocs"
  RewriteEngine On
  RewriteCond %{HTTPS} !=on
  RewriteRule ^/(.*) https://example.com/ [R,L]
  RewriteCond %{HTTP_HOST} ^www\.example\.com [NC]
  RewriteRule ^/(.*) https://example.com/ [R,L]
  <Directory "/opt/bitnami/apache2/htdocs">

相关内容