我想将我的所有网络流量重定向到 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">
........
唯一不重定向的网站是
我错过了什么?
答案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">