设置网站 http 访问强制跳转至 https 访问

如今越来越多网站启用 https 访问来加强网站的安全性。本博客网站也是最近才正式使用 https 。启用了 https ,网站要么取消之前的 http 访问,但这样一来,之前的网站内容链接将打不开,这点很多站长都不愿意看到,毕竟网站存在很多年,难免会有一些粉丝,突然切断之前的链接,体验性不佳也不友好;要么就是既可以 http 访问,又可以 https 访问,但这样不能提高网站的安全性。我认为,比较友善的做法是,同时开启 http 和 https ,并设置 http 访问强制跳转至 https 访问。以本站为例,要达到效果就是,如果要访问http://wer.yiwan.org/index.php/ltd_documents/361-linux-vps-server-login-security.html,则浏览器自动跳转至访问https://wer.yiwan.org/index.php/ltd_documents/361-linux-vps-server-login-security.html

设置方式,通过搜索,网上教程一大堆,五花八门,如添加 .htaccess  文件作重定向、针对某个目录跳转、针对某个网页跳转等,太过繁杂。偶然网上看到一篇文章 Redirect From HTTP to HTTPS ,外国小哥的方式很合我意,于是采用之,经测试可行,简单方便,在此列出如下:

一、准备工作

(一)网站得使能 ssl ,对于 Apache2 ,用命令:

a2enmod ssl

同时还要使能 rewrite

a2enmod rewrite

(二)/etc/apache2/sites-availables/ 下删除之前的 000-default.confdefault-ssl.conf 文件(最好先备份一下),新建一个以网站域名为文件名的文件,以本博客网站为例,新建 wer.yiwan.org.conf 文件。

(三) /etc/apache2/sites-enabled/ 下的所有链接文件删除。

二、网站配置

新建的 wer.yiwan.org.conf 文件内容如下:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
<VirtualHost *:80>
	ServerName wer.yiwan.org
	ServerAdmin webmaster@localhost
	DocumentRoot /home/litanid/litanid_WWW/LiTa

	ErrorLog ${APACHE_LOG_DIR}/error.log
	CustomLog ${APACHE_LOG_DIR}/access.log combined

	RewriteEngine on
	RewriteRule ^ https://%{SERVER_NAME}%{REQUEST_URI} [END,QSA,R=permanent]

</VirtualHost>

<IfModule mod_ssl.c>
<VirtualHost *:443>
	ServerName wer.yiwan.org
	ServerAdmin webmaster@localhost
	DocumentRoot /home/litanid/litanid_WWW/LiTa

	SSLEngine on
	SSLCertificateFile /home/litanid/.ssl/apa-letsencrypt/wer.yiwan.org/fullchain.pem
	SSLCertificateKeyFile /home/litanid/.ssl/apa-letsencrypt/wer.yiwan.org/key.pem

	ErrorLog ${APACHE_LOG_DIR}/error.log
	CustomLog ${APACHE_LOG_DIR}/access.log combined

</VirtualHost>
</IfModule>

三、后期工作

除以上内容之外,无需添加或修改任何配置。后期工作:

(一)使能网站配置

a2ensite wer.yiwan.org.conf

这将自动在 /etc/apache2/sites-enabled/ 下生成指向 /etc/apache2/sites-availables/wer.yiwan.org.conf 的软链接文件。

(二)重启 Apache2 ,使设置生效即可。

/etc/init.d/apache2 restart