Ubuntu下Apache2配置https且强制http转为https

一、Ubuntu下的Apache2

1. 安装Apache2

 sudo apt-get install apache2

– 默认站点在 /var/www/
– 配置文件在 /etc/apache2/
– 日志在 /var/log/apache/
– 启动脚本是 /etc/init.d/apache2

2. etc/apache2下的文件夹与文件
apache2.conf:Apache的主要配置文件,包含全局配置。
envvars:Apache2环境变量设置。
ports.conf:配置Apache监听的端口。
mods-available:这个目录包含模块和模块配置文件,不是所有的模块都有配置文件。
mods-enabled:持有/etc/apache2/mods-available目录下文件的链接,当该目录下有一个模块文件和其配置文件,那么Apache重启后该模块将生效。
sites-available:这个目录包含Apache虚拟主机的配置文件。虚拟主机允许Apache配置多个站点并为每个站点配置不同的参数。后面下面配置的时候会配置80端口的http重定向为443的https。
sites-enabled:持有/etc/apache2/sites-available目录下文件的链接。当Apache重启后,该目录中包含的站点将会被激活。

3.ssl配置
安装openssl

sudo apt-get install openssl

开启ssl模块

sudo a2enmod ssl

无效则输入下面两个命令

sudo ln -s /etc/apache2/mods-available/ssl.load /etc/apache2/mods-enabled/ssl.load
sudo ln -s /etc/apache2/mods-available/ssl.conf /etc/apache2/mods-enabled/ssl.conf

获取证书
申请腾讯云或者阿里云的免费证书
腾讯云:https://console.qcloud.com/ssl
阿里云:https://help.aliyun.com/document_detail/28548.html
会有3个文件
1_root_bundle.crt
2_xxx.crt
3_xxx.key

二、配置HTTPS(SSL)

1.进入/etc/apache2/ports.conf
查看是否有

Listen 80
Listen 443

没有就添加上去

2.配置ssl虚拟站点
上文安装完后,会在/etc/apache2/sites-available/目录下生成一个缺省的default-ssl文件。缺省的网页目录仍然是/var/www/。我们可以创建一个链接到site-enabled目录。

sudo ln -s /etc/apache2/sites-available/default-ssl.conf /etc/apache2/sites-enabled/001-ssl

如果不想用软链接,可以从sites-available中复制default-ssl.conf到sites-enabled(表示启用的配置),然后修改default-ssl.conf

SSLCertificateFile
SSLCertificateKeyFile
SSLCertificateChainFile

配置为

SSLCertificateFile  证书地址/2_xxx.crt
SSLCertificateKeyFile 证书地址/3_xxx.key
SSLCertificateChainFile 证书地址/1_root_bundle.crt

重启apache,应该已经可以访问https了

sudo service apache2 restart

三、设置http重定向为https

1.启动重定向
启动 rewrite mod

sudo a2enmod rewrite 
或者
sudo ln -s /etc/apache2/mods-available/rewrite.load  /etc/apache2/mods-enabled/rewrite.load

2.设置http端口重定向
打开 /etc/apache2/sites-available/000-default.conf ,
在 <\VirtualHost *:80><\VirtualHost> 标签内随便一个地方加入以下三行

RewriteEngine on
RewriteCond   %{HTTPS} !=on
RewriteRule   ^(.*)  https://%{SERVER_NAME}$1 [L,R=301]

或者在网站目录处新建.htaccess 输入

RewriteEngine on
RewriteBase / 
RewriteCond %{SERVER_PORT} !^443$
RewriteRule ^.* https://%{SERVER_NAME}%{REQUEST_URI} [L,R=301]

3.最后重启

sudo service apache2 restart

如果使用Wordpress,

需要在设置中修改为https://www

phpcms v9 启用手机门户(自动判断手机浏览器)

1、确定一个域名作为你手机wap站点的访问域名,例如:http://m.xxx.com 。接下来在域名管理系统中简析这个域名到你的服务器地址。

2、修改\caches\configs\route.php 文件,增加手机路由地址,方法如下:

return array(
        'default'=array('m'='content', 'c'='index', 'a'='init'),
        'm.xxx.com'=array('m'='wap', 'c'='index', 'a'='init'),
);

3、到phpcms后台,模块-》手机门户-》修改 配置相关信息

4、然后分类管理里添加分类。

5、最后开启,刷新缓存,确认域名生效后就ok了。

——————————————————————

每个步骤都按要求操作了,还是跳转电脑版???

此时可以试试m.xx.com/index.php是否可以正常访问wap页面,若可以说明wap功能正常启用,只是没有自动转向index.php引导其跳转。

1. m.xx.com是否正确指向程序目录。

2.手机网站需要index.php作为引导,可以在主机控制面板里添加index索引次序,index.php应优于index.html。

另外也可以在手机模板中添加如下js解决:

<script>
try{if(self.location='http://m.xx.com'){
top.location.href='http://m.xx.com/index.php';
}}catch(e){}
</script>

———————————————————–

上述这种,虽然开启了手机访问,但是不支持自动识别,自动跳转。相当上述,只是把域名绑定到wap手机模版。

下面介绍自动识别,自动跳转:

网站主页添加:

<script>
function GetQueryString(name) {
     var reg = new RegExp("(^|&)"+ name +"=([^&]*)(&|$)");
     var r = window.location.search.substr(1).match(reg);
     if(r!=null)return  unescape(r[2]); return null;
}
/* 智能机浏览器版本信息 */
var browser = { 
    versions: function () { 
        var u = navigator.userAgent, app = navigator.appVersion;
                return {        //移动终端浏览器版本信息  
            trident: u.indexOf('Trident') > -1, //IE内核
                        presto: u.indexOf('Presto') > -1, //opera内核
            webKit: u.indexOf('AppleWebKit') > -1, //苹果、谷歌内核
            gecko: u.indexOf('Gecko') > -1 && u.indexOf('KHTML') == -1, //火狐内核 
            mobile: !!u.match(/AppleWebKit.*Mobile.*/), //是否为移动终端
                        ios: !!u.match(/\(i[^;]+;( U;)? CPU.+Mac OS X/), //ios终端
                        android: u.indexOf('Android') > -1, //android终端
                        iPhone: u.indexOf('iPhone') > -1, //是否为iPhone
                        iPad: u.indexOf('iPad') > -1, //是否iPad 
            webApp: u.indexOf('Safari') == -1 //是否web应该程序,没有头部与底部
                        };
                } (), 
    language: (navigator.browserLanguage || navigator.language).toLowerCase() 
}
if (GetQueryString('from') != 'mobile' && browser.versions.mobile)
        window.location.href = "https://www.qjj.fr/index.php?m=wap";
</script>