HTTP重定向到HTTPS默认虚拟主机上没有服务器名称(Redirect HTTP to HTTPS

2019-06-17 12:23发布

在我的Apache服务器,我想能够重定向所有传入的HTTP请求等效HTTPS请求。 美中不足的是,我希望能够做到这一点对我的默认虚拟主机不指定ServerName ,并与任何服务器名重定向的作品出现在请求URL。 我希望这样的事情:

NameVirtualHost *:80
<VirtualHost *:80>
    RedirectPermanent / https://%{SERVER_NAME}/
    ...
</VirtualHost>

这可能使用Redirect ,否则我将不得不诉诸Rewrite

Answer 1:

尝试在你的虚拟主机的配置添加此:

RewriteEngine On
RewriteRule ^(.*)$ https://%{HTTP_HOST}$1 [R=301,L]


Answer 2:

这两个工作正常。 但根据Apache的文档 ,你应该避免使用mod_rewrite简单的重定向,并且使用Redirect来代替。 因此,据他们说,你最好这样做:

<VirtualHost *:80>
    ServerName www.example.com
    Redirect / https://www.example.com/
</VirtualHost>

<VirtualHost *:443>
    ServerName www.example.com
    # ... SSL configuration goes here
</VirtualHost>

第一/Redirect是url,第二部分是它应该被重定向。

你也可以用它来网址重定向到一个子域: Redirect /one/ http://one.example.com/



Answer 3:

这是为了省去不必要的重定向的完整的方式,太;)

这些规则意在.htaccess文件中使用,如在*一个重写规则:80 VirtualHost条目,不需要条件。

RewriteEngine on
RewriteCond %{HTTPS} off [OR] 
RewriteCond %{HTTP:X-Forwarded-Proto} !https
RewriteRule ^/(.*) https://%{HTTP_HOST}/$1 [NC,R=301,L]

Eplanations:

RewriteEngine on

==>使发动机在所有

RewriteCond %{HTTPS} off [OR]

==>匹配上非HTTPS连接,或(未设定[OR]将导致一个隐式AND!)

RewriteCond %{HTTP:X-Forwarded-Proto} !https

==>匹配上转发连接(代理,负载均衡器等), 而不 HTTPS

RewriteRule ^/(.*) https://%{HTTP_HOST}/$1 [NC,R=301,L]

==>如果两个条件匹配的一个,做整个URL的重写,发送301有这个客户端“学习”(有些事,有些没有)和L的最后一条规则。



文章来源: Redirect HTTP to HTTPS on default virtual host without ServerName