Andy's Blog » mod_vhost_alias mod_rewrite, apache alias rewrite 虚拟主机, apache mod_vhost_alias, mod_rewrite mod_vhost_alias, mod_vhost_alias, VirtualDocumentRoot %2, wsgi, picturedr5q » Apache虚拟主机的配置

Apache虚拟主机的配置

来源:Apache中文手册

从手册中摘录有用的出来,郁闷,手册里太长了看不太懂。

几篇跟虚拟主机相关的Apache官方文档

  1. 虚拟主机的例子
  2. 大容量虚拟主机的动态配置
  3. Apache模块 mod_vhost_alias
  4. 深入研究虚拟主机的匹配

22:00 更新:
==============================================================
今天学习的总结:

mod_vhost_aliasmod_rewrite 方法要好!

21andy.com注:在实际使用mod_vhost_alias中 VirtualDocumentRoot 要设置为绝对路径,即像d:/www/%0 这样,不然Apache会报错!

试了一下,果然很爽,可以使用

VirtualDocumentRoot /www/%2+

来实现泛解析,不过不管什么二级域名都被解析到根目录了,郁闷!也就是说
*.21andy.com 会被指向 /www/21andy.com

再想想,于是,可以用

VirtualDocumentRoot /www/%2+/%0

来实现二级域名分目录,即
www.21andy.com 会被指向 /www/21andy.com/www.21andy.com
test1.21andy.com 会被指向 /www/21andy.com/test1.21andy.com
test2.21andy.com 会被指向 /www/21andy.com/test2.21andy.com

有点不足,这样,www.21andy.com 也需要在21andy.com目录下再建一个目录了,要是www能到根目录,其他二级域名到二级目录就好了,不过也好,这样规范点,呵呵

主要是以下这2句,再也不用一个个绑域名了,只需要建立对应域名的目录

UseCanonicalName Off
VirtualDocumentRoot /www/%2+/%0

==============================================================

一、使用 mod_vhost_alias

1. 简单的动态虚拟主机

# 从 Host: 头中取得服务器名字 Server Name
UseCanonicalName Off

# 这里的日志格式,可以在将来通过第一个参数域来分隔不同的虚拟主机的日志
LogFormat "%V %h %l %u %t \"%r\" %s %b" vcommon
CustomLog logs/access_log vcommon

# 在返回请求的文件名的路径中包含进服务器名字: server name
VirtualDocumentRoot /www/hosts/%0/docs
VirtualScriptAlias /www/hosts/%0/cgi-bin

2. 更为有效的基于 IP 地址的虚拟主机

# 从 IP 地址反解析得到服务器名字(server name)
UseCanonicalName DNS

# 在日志中包含 IP 地址,便于后续分发
LogFormat "%A %h %l %u %t \"%r\" %s %b" vcommon
CustomLog logs/access_log vcommon

# 在文件路径中包含 IP 地址
VirtualDocumentRootIP /www/hosts/%0/docs
VirtualScriptAliasIP /www/hosts/%0/cgi-bin

二、使用 mod_rewrite

1. 使用 mod_rewrite 实现简单的动态虚拟主机

# 从 Host: 头获取服务器名字
UseCanonicalName Off

# 可分割的日志
LogFormat "%{Host}i %h %l %u %t \"%r\" %s %b" vcommon
CustomLog logs/access_log vcommon

<Directory /www/hosts>
# ExecCGI is needed here because we can't force
# CGI execution in the way that ScriptAlias does
Options FollowSymLinks ExecCGI
</Directory>

# 接下来是关键部分

RewriteEngine On

# a ServerName derived from a Host: header may be any case at all RewriteMap lowercase int:tolower
## 首先处理普通文档:
# 允许变名 /icons/ 起作用 - 其他变名类同
RewriteCond %{REQUEST_URI} !^/icons/
# 允许 CGIs
RewriteCond %{REQUEST_URI} !^/cgi-bin/
# 开始“变戏法”
RewriteRule ^/(.*)$ /www/hosts/${lowercase:%{SERVER_NAME}}/docs/$1

## 现在处理 CGIs - 我们需要强制使用一个 MIME 类型
RewriteCond %{REQUEST_URI} ^/cgi-bin/
RewriteRule ^/(.*)$ /www/hosts/${lowercase:%{SERVER_NAME}}/cgi-bin/$1 [T=application/x-httpd-cgi]

# 好了!

2. 使用独立的虚拟主机配置文件 vhost.map

vhost.map 文件包含了类似下面的内容:

www.customer-1.com /www/customers/1
www.customer-2.com /www/customers/2
# ...
www.customer-N.com /www/customers/N

http.conf 包含了:

RewriteEngine on

RewriteMap lowercase int:tolower

# 定义映像文件
RewriteMap vhost txt:/www/conf/vhost.map

# 和上面的例子一样,处理变名
RewriteCond %{REQUEST_URI} !^/icons/
RewriteCond %{REQUEST_URI} !^/cgi-bin/
RewriteCond ${lowercase:%{SERVER_NAME}} ^(.+)$
# 这里做基于文件的重新映射
RewriteCond ${vhost:%1} ^(/.*)$
RewriteRule ^/(.*)$ %1/docs/$1

RewriteCond %{REQUEST_URI} ^/cgi-bin/
RewriteCond ${lowercase:%{SERVER_NAME}} ^(.+)$
RewriteCond ${vhost:%1} ^(/.*)$
RewriteRule ^/(.*)$ %1/cgi-bin/$1

Incoming search terms:

Tags: 配置, 教程, apache, 虚拟主机, mod_rewrite, mod_vhost_alias, rewrite

本文地址: http://www.21andy.com/new/20070113/533.html

1 评论 to “PHP开源CMS之MODx”

  1. storysky 于 2012-12-20 18:58:13 发表:

    用这个模块之前要先加载,很多apache默认是不加的,试了半天原来是没加载模块,我靠
    mod_vhost_alias.so