如何在Apache服务器上自动将HTTP重定向到HTTPS ?

环境 Centos与apache

试图设置自动重定向从http到https

From manage.mydomain.com --- To ---> https://manage.mydomain.com

我已经尝试添加以下到我的httpd.conf,但它没有工作

 RewriteEngine on
ReWriteCond %{SERVER_PORT} !^443$
RewriteRule ^/(.*) https://%{HTTP_HOST}/$1 [NC,R,L]

什么好主意吗?

416327 次浏览
RewriteEngine On
RewriteCond %{HTTPS} off
RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI}

http://www.sslshopper.com/apache-redirect-http-to-https.html < a href = " http://www.sslshopper.com/apache-redirect-http-to-https.html " > < / >

http://www.cyberciti.biz/tips/howto-apache-force-https-secure-connections.html < a href = " http://www.cyberciti.biz/tips/howto-apache-force-https-secure-connections.html " > < / >

实际上,你的主题属于https://serverfault.com/,但你仍然可以尝试检查这些. htaccess指令:

RewriteEngine on
RewriteCond %{HTTPS} off
RewriteRule ^(.*) https://%{HTTP_HOST}/$1

我实际上遵循了这个例子,它对我很有效:)

NameVirtualHost *:80
<VirtualHost *:80>
ServerName mysite.example.com
Redirect permanent / https://mysite.example.com/
</VirtualHost>


<VirtualHost _default_:443>
ServerName mysite.example.com
DocumentRoot /usr/local/apache2/htdocs
SSLEngine On
# etc...
</VirtualHost>

然后做:

/etc/init.d/httpd restart

搜索apache redirect http to https并降落在这里。这是我在ubuntu上所做的:

1)启用模块

sudo a2enmod rewrite
sudo a2enmod ssl

2)编辑你的网站配置

编辑文件

/etc/apache2/sites-available/000-default.conf

内容应该是:

<VirtualHost *:80>
RewriteEngine On
RewriteCond %{HTTPS} off
RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI}
</VirtualHost>


<VirtualHost *:443>
SSLEngine on
SSLCertificateFile    <path to your crt file>
SSLCertificateKeyFile   <path to your private key file>


# Rest of your site config
# ...
</VirtualHost>
  • 注意,SSL模块需要证书。你将需要指定一个现有的(如果你买了一个)或自己指定生成自签名证书

3)重新启动apache2

sudo service apache2 restart

这招对我很管用:

RewriteCond %{HTTPS} =off
RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI} [QSA,L,R=301]

这个代码为我工作。

# ----------port 80----------
RewriteEngine on
# redirect http non-www to https www
RewriteCond %{HTTPS} off
RewriteCond %{SERVER_NAME} =example.com
RewriteRule ^ https://www.%{SERVER_NAME}%{REQUEST_URI} [END,QSA,R=permanent]


# redirect http www to https www
RewriteCond %{HTTPS} off
RewriteCond %{SERVER_NAME} =www.example.com
RewriteRule ^ https://%{SERVER_NAME}%{REQUEST_URI} [END,QSA,R=permanent]

# ----------port 443----------
RewriteEngine on
# redirect https non-www to https www
RewriteCond %{SERVER_NAME} !^www\.(.*)$ [NC]
RewriteRule ^ https://www.%{SERVER_NAME}%{REQUEST_URI} [END,QSA,R=permanent]

使用mod_rewrite不是推荐的方式,而是使用虚拟主机和重定向。

如果你倾向于使用mod_rewrite:

RewriteEngine On
# This will enable the Rewrite capabilities


RewriteCond %{HTTPS} !=on
# This checks to make sure the connection is not already HTTPS


RewriteRule ^/?(.*) https://%{SERVER_NAME}/$1 [R,L]
# This rule will redirect users from their original location, to the same
location but using HTTPS.
# i.e.  http://www.example.com/foo/ to https://www.example.com/foo/
# The leading slash is made optional so that this will work either in
# httpd.conf or .htaccess context

参考:重写httptohttps

如果你正在寻找一个301永久重定向,那么重定向标志应该是,

 R=301

所以RewriteRule会像这样,

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

如果你有Apache2.4,检查000-default.conf -删除DocumentRoot并添加

Redirect permanent / https://[your-domain]/

服务器版本:Apache/2.4.29 (Ubuntu)

在网上和apache的官方文档上搜索了很长时间后,唯一适合我的解决方案来自/usr/share/doc/apache2/README.Debian.gz

To enable SSL, type (as user root):


a2ensite default-ssl
a2enmod ssl

在/etc/apache2/sites-available/000-default.conf文件中添加

重定向"/" "https://sub.domain.com/"

<VirtualHost *:80>


#ServerName www.example.com
DocumentRoot /var/www/owncloud
Redirect "/" "https://sub.domain.com/"

就是这样。


注:如果你想阅读手册而不提取:

gunzip -cd /usr/share/doc/apache2/README.Debian.gz
请在apache Virtualhosting配置中尝试这个 然后重新加载apache service

RewriteEngine On


RewriteCond %{HTTPS} off




RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI}

我需要这个来做一些简单的事情,比如将所有http流量从我服务器上的默认apache主页重定向到一个通过https服务的页面。

由于我在配置apache时仍然相当绿色,我更喜欢避免直接使用mod_rewrite,而是使用像这样更简单的东西:

<VirtualHost *:80>
<Location "/">
Redirect permanent "https://%{HTTP_HOST}%{REQUEST_URI}"
</Location>
</VirtualHost>


<VirtualHost *:443>
DocumentRoot "/var/www/html"
SSLEngine on
...
</VirtualHost>

我喜欢这个,因为它允许我使用apache变量,这样我就不必指定实际的主机名,因为它只是一个没有关联域名的IP地址。

< p >引用: https://stackoverflow.com/a/40291044/2089675 < / p >

对我来说这很有效

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