1. 正在先生首页
  2. 技术开发

Apache 虚拟主机配置文件一则 – 去www及强制https

在Apache上配置虚拟主机不是件复杂的事情。但却容易出错。比如需要多次重复输入域名。
另外,随着SSL的逐渐普及,以及不带www的访问域名地址的流行,对虚拟主机的配置有必要一步到位。
这里记录下我自己的虚机配置文件,给大家一些思路。

# 把 http 的 80 端口 和 https 的 443 端口写在一起,可以节省下不少配置行数

    # 用 Define 定义一个变量 DOMAIN ,在需要配置其它虚拟主机,只需要修改一个变量,出错的概率就小很多 
    # [Define 是全局变量][1] 
    Define DOMAIN 84361749.com
    # 在配置文件中,引用变量的方式是 ${...} 
    ServerName ${DOMAIN}
    ServerAlias www.${DOMAIN}
    ErrorLog logs/${DOMAIN}.error_log
    CustomLog logs/${DOMAIN}.access_log common
    
    # 我喜欢将所有虚拟主机按域名安装在根目录的 apps 下,然后再按照子域名生成目录。两级 ${DOMAIN} 是考虑到以后可能会有子域名
    DocumentRoot "/apps/${DOMAIN}/${DOMAIN}"

    # 在 ${DOMAIN} 目录下,还可以统一放置虚拟主机配置文件,这个是加载一个 htaccess.conf 的配置文件
    # 变量 ${DOMAIN} 会被继承到 Include 内
    Include "/apps/${DOMAIN}/conf/htaccess.conf"

    # 如果需要配置 SSL,增加下面三行,我使用的是的[letsencrypt][2],免费的
    SSLEngine on
    SSLCertificateFile "/apps/${DOMAIN}/letsencrypt/live/${DOMAIN}/fullchain.pem"
    SSLCertificateKeyFile "/apps/${DOMAIN}/letsencrypt/live/${DOMAIN}/private.pem"

    # 准备做 www 和 https 跳转
    RewriteEngine On
    # 强制将所有 www 访问 301 转向至不含 www 的地址。这个写法比网上其它教程的好处是可以忽略具体域名。
    RewriteCond %{HTTP_HOST} ^www\.(.*)
    RewriteRule ^/(.*)$ http://%1/$1 [R=301,L]
    # 检查是否使用了 https 协议访问,如果没有,强制 301 跳转至 https 
    RewriteCond %{HTTPS} !=on
    RewriteRule ^/(.*) https://%{SERVER_NAME}/$1 [R=301,L]

    # 打开网站目录的 PHP 执行权限以及 .htaccess 的执行权限
    # 在这里定义的好处是可以让这个配置文件更加通用,忽略掉 Apache 全局定义对该虚机的影响
    
        Options Indexes FollowSymLinks
        AllowOverride All
        Require all granted
    

Define 是全局变量letsencrypt

原创文章,作者:Y.Y,如若转载,请注明出处:https://84361749.com/post/vhost-conf.html

发表评论

电子邮件地址不会被公开。 必填项已用*标注