在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
原创文章,作者:Y.Y,如若转载,请注明出处:https://84361749.com/post/vhost-conf.html