Apache 2 配置二级域名 图文教程 [VMware, LAMP, vhost, vhost.map, a2ensite]
关于二级域名和网站子目录之间的关系和联系相信很多朋友都知道了的.作为与主站关系不是很大的子分类来说, 比如bbs.domainname.com, news.domainname.com之类还是需要使用二级域名的. 由于apachhe2不同于以往的apache版本, 有一些配置文件已经分散放在各个不同的文件里了, 所以如果还是根据网络的旧资料来配置文件的话会带来很大困惑, 其实新版的apache2最大的优点就是采用了结构更好的架构, 当然在配置虚拟主机的过程还是和旧版本的有一些差别的. 下面就用Apache2配置虚拟主机的二级域名来做下说明, 附带说明一下我的环境, 我是在VMware下配置的LAMP环境, 我的apache2 路径在/etc/apache2/, 网站根目录: /var/www/, 如果你采用的是一键安装版的话,一般都是装在/usr/local/etc/apache2/, 网站的根目录在/usr/local/www这个在配置过程中要注意一下. 下面进入正题
关于虚拟主机下同IP多域名虚拟主机的问题请参考我的另一篇文章. 由于在进行二级域名的配置过程中要用到mod_rewrite模块的支持, 需要先开启mod_rewrite模块, 请参考我转的一篇文章, apache2服务器mod_rewrite模块 开启方法. 要做二级域名的解析, 首先要做的是你最好有一个顶级域名, 如果你还没有申请到顶级域名, 就按照我的例子在本地以phpwindtest.com为例进行介绍, 要添加的域名是bbs.phpwindtest.com, 其他的如news.phpwindtest.com都类似设置. 这样的话可以让你自由地本地进行安装测试各种的网站,论坛,博客等, 待测试完成后再解析到外网上. 大致的情况就介绍到这里, 打开服务器端的apache2 的配置文件httpd.conf, 要注意, 如果你在其他的网站看到的这个资料时, 会发现它们会介绍这个文件有很多的内容, 那主要是基于apache来讲的, 对于apache2来说, 它的内容很简单, 一般就是ServerName localhost这一个字符, 其他的啥都没有. 更别提有什么mod_rewrite模块了, 如下图:
实际上Apache2的配置文件是和它同等的目录下的apache2.conf, 也即是/etc/apache2/apache2.conf,
RewriteEngine on
RewriteMap lowercase int:tolower #特别注意: 现在网络有很多转贴中这个lowercase被空格了, 变成:lower case, 初步分析, 这个是由于他们在转贴时使用了转贴工具导致的错误, 但是对于学习者来说却是莫大的影响, 在此提请转贴的朋友, 一定要小心在意.
RewriteMap vhost txt:/etc/apache2/vhost.map
RewriteCond ${lowercase:%{SERVER_NAME}} ^(.+)$
RewriteCond ${vhost:%1} ^(/.*)$
RewriteRule ^/(.*)$ %1/$1
如图:
在这里要强调的是, 你一定要根据你自己的apache2实际情况来自己配置, 注意点见上面的介绍. 然后,在/etc/apache2/新建一个文件vhost.map, 输入如下的内容:
完成后保存,注意两点, 一点是域名和文件夹之间有空格, 另一点是要用根路径. 最后, 在对应的文件夹内建立对应的目录. 通过这种操作,可以创建无限个二级域名网站, 如news.phpwindtest.com, product.phpwindtest.com等. 设置完成后,保存退出即可.
通过浏览器访问我们的网站,www.phpwindtest.com, 它访问的对应目录是/var/www/neiwang/phpup, 访问bbs.phpwindtest.com时, 它访问对应的目录是/var/www/neiwang/phpup/bbs, 其他依次类推. 至此, 对于一般的直接放到外网的网站来讲, 二级域名设置完成. 但是针对本地测试的网站, 总不可能你一直使用IP地址访问吧? 如果能和访问外网的方式来访问本地站的话会更好. 这一点也可以做得到, 不过你要修改一下实体机的HOSTS表. HOSTS表的作用可以参考其他的网络资料.这里只作简要的设置说明.
XP系统的HOSTS表的路径:C:\WINDOWS\system32\drivers\etc, 编辑里面的内容. 添加如下的内容:
192.168.21.102 www.phpwindtest.com #说明:192.168.21.102 这个是我ubuntu的IP地址, www.phpwindtest.com虚拟的测试域名, 完成后保存.
192.168.21.102 bbs.phpwindtest.com #说明:192.168.21.102 这个是我ubuntu的IP地址, bbs.phpwindtest.com虚拟的测试域名, 完成后保存.
如图示:
即使通过这样的设置, 也不会如你预期那样可以通过二级域名访问到对应的文件夹内的内容, 如本例的/var/www/neiwang/phpup/bbs, 你还要在apache2服务器内再配置一个独立于主域名的配置文件, 这个文件可以直接从该主域名的文件内进行COPY, 其路径是在/etc/apache2/sites-available/下, 然后再适当编辑一下它的ServerName, DocumentRoot之类的参数, 为了方便起见, 可以直接使用主配置文件的ErrorLog, CustomLog, 如图示:
然后再将该配置文件链到sites-enabled/文件夹下, 可以使用软链接(ln -s),也可以COPY命令, 使用软链接的好处是当你源文件更新时, 软链接的文件也立即更新, 通俗理解, 软链接就是WIN系统下的快捷方式. 然后, 也可以用a2ensite sitesname(配置文件名称),即:
#a2ensite sitesname
这样的话, 也可以建立更新的链接
然后重启apache2:
#/etc/init.d/apache2 restart
#service apache2 restart #建议使用这个命令
然后通过浏览器键入域名:www.phpwindtest.com进行访问,可以看到顶级域名的信息, 通过bbs.phpwindtest.com 就可得到对应文件夹的文件了.
顶级域名效果:
二级域名效果:
至此二级域名的设置完全解决. 再延伸一步, 这是一个虚拟主机, 那么第二个,第三个,乃至更多的虚拟主机能不能这样设置呢? 答案是肯定的, 依照此方法, wwufengg已经完成多个虚拟主机架设二级域名的工作.
特别需要注意的是: 上面的phpwindtest.com实质上是在本地测试完成的, 并不是在外网上可以正常访问的, 这样做只是为了测试方便而已, 如果你已经申请了域名,就特别要注意, 要在DNS服务器上把二级域名给设置好才行. 把二级域名对应的的主机空间定义一下, 我就是没有注意到这一点, 在部署外部的二级域名时绕了很大的弯路, 悲摧(一般都是和顶级域名的IP地址一样的, 注意www.abc.com之类的也是二级域名哦, 真正的顶级域名是:abc.com, 这个要注意一下. )
N久之后我再重新配置时又遇到了上面黑体字的误区, 也就是: 要在DNS服务器上把二级域名给设置好才行. 把二级域名对应的的主机空间定义一下
source: http://www.cnblogs.com/wwufengg/archive/2013/01/31/apache2-config-domain.html