帮朋友管理的外贸垂直搜索网站,新版本用上了facebook的api,需要配置https才能调。为了不影响原来的收录,保持原来的http版本网站,同时启用https版本。下面是遇到的两处apache设置。

设置一:域名跳转

实现效果:
http://52os.net 跳转到 http://www.52os.net
https://52os.net 跳转到 https://www.52os.net

使用的是apache的rewrite模块,配置如下:

RewriteCond %{HTTP_HOST} ^[^.]+\.[^.]+$
RewriteCond %{HTTPS}s ^on(s)|
RewriteRule ^ http%1://www.%{HTTP_HOST}%{REQUEST_URI} [L,R=301]

第一行是重写条件,%{HTTP_HOST}表示当前访问的网址,不包括“http://”和网址后面的“/”,^表示字符串开始,$表示字符串结尾。这句规则是匹配根域(类似root.com)执行以下面的规则,不符合就跳过。
第二行如果https的状态是on,%1匹配的值为s;如果https的状态没有启用,那么%1值就为空值
第三行就是相应跳转了。正则表达式比较难写,边用边google就行了,这个方法来自stackoverflow

设置二:apache重启不用输入密码

在用openssl生成apache的https证书签署请求文件(csr)和私钥(key)时,默认是要输入一个密码的,签署成功后配置到apache后,每次重启都要输入这个密码,很麻烦,要移除这个密码有两种方法:

1.用openssl

openssl rsa -in /path/to/originalkeywithpass.key -out /path/to/newkeywithnopass.key

这种方法来自apache官方,我没有测试

2.配置SSLPassPhraseDialog+脚本
将apache配置文件中的SSLPassPhraseDialog改为:

SSLPassPhraseDialog exec:/etc/httpd/conf.d/nopass.sh

新建一个/etc/httpd/conf.d/nopass.sh文件,内容为:

#!/bin/bash
echo "PASSWORD"

并加上执行权限,在重启apache时就不会提示密码了

参考文章:
http://stackoverflow.com/questions/2015159/htaccess-redirect-for-non-www-both-http-and-https
https://wiki.apache.org/httpd/RemoveSSLCertPassPhrase