1.概况
Apache的.htaccess功能强大,但是用法也比较奇特,因此每次使用都是查遍互联网。为了同时给服务器配置多个虚拟主机,以及给某一域名配置多个二级域名,可以在htaccess中创建多个VitualHost段,但是数量多时这样操作就太麻烦,而且要重启Apache。为了配置简单,可以使用正则表达式匹配,并且为了方便增删二级域名将域名和目录对写到单独的vhost文件,便于修改。
2.配置多个域名虚拟主机
需求:
·使用本机地址127.0.0.1访问时进入的服务器管理页面,包括phpMyAdmin等;
·使用域名sample1.com访问时,进入应用程序一。
配置:
<VirtualHost 127.0.0.1> ServerName localhost DocumentRoot "%APMXE%/htdocs"
<Directory "%APMXE%/htdocs"> Options FollowSymLinks IndexOptions FancyIndexing FoldersFirst NameWidth=* VersionSort XHTML AllowOverride All Order allow,deny Allow from all </Directory> </VirtualHost>
<VirtualHost *> ServerName sample1.com ServerAlias www.sample1.com DocumentRoot "%APMXE%/htdocs/application1" <Directory "%APMXE%/htdocs/application1"> Options FollowSymLinks IndexOptions FancyIndexing FoldersFirst NameWidth=* VersionSort XHTML AllowOverride All Order allow,deny Allow from all </Directory> </VirtualHost> |
说明:
第一段VirtualHost中的IP地址指明了客户端IP,%APMXE%为webroot所在目录。使用ServerName指定了入口域名为localhost,这样只有本机能够进入管理界面。
第二段VirtualHost接受所有IP地址访问,并且同时域名sample1.com和www.sample1.com两个域名访问。DocumentRoot指明了应用程序所在目录,访问以上域名实际上是访问了Application1目录中的文件。
3.配置多个二级域名
需求:
·使用a.sample2.com、b.sample2.com…不同域名访问不同目录中的程序
·便于动态增删,不同经常修改配置和重启Apache
htaccess配置:
<VirtualHost *> ServerName sample2.com ServerAlias www.sample2.com DocumentRoot "%APMXE%/htdocs/application2 "
<Directory "%APMXE%/htdocs/ application2 "> Options FollowSymLinks IndexOptions FancyIndexing FoldersFirst NameWidth=* VersionSort XHTML AllowOverride All Order allow,deny Allow from all </Directory> RewriteEngine on RewriteMap vhost txt:C:/apmxe/etc/vhost.map RewriteMap lowercase int:tolower RewriteCond ${lowercase:%{SERVER_NAME}} ^(.+)$ RewriteCond ${vhost:%1} ^(.*)$ RewriteRule ^/(.*)$ %1/$1 </VirtualHost> |
vhost.map文件
a.sample.com C:/apmxe/htdocs/a doc.sample.com C:/apmxe/htdocs/doc ec.sample.com C:/apmxe/htdocs/ec test.sample.com C:/apmxe/htdocs/test |
说明:
VirtualHost中前半部分与上文一致,但是后半部分使用了RewriteEngine。通过将vhost.map文件中的域名、目录读取到vhost变量,并在RewriteCond中用正则表达式匹配二级域名,并重写到相应的目录。