日期:2012-05-04  浏览次数:20664 次

首先用“记事本”程序打开“httpd.conf”配置文件。此文件存放在Apache服务器安装路径下的“conf”文件夹内。

一、使用 mod_vhost_alias

1.简单的动态虚拟主机

(1)从 Host: 头中取得服务器名字 Server Name

UseCanonicalName Off
(2)这里的日志格式,可以在将来通过第一个参数域来分隔不同的虚拟主机的日志

LogFormat "%V %h %l %u %t \"%r\" %s %b" VCommon
CustomLog logs/Access_log vcommon
(3)在返回请求的文件名的路径中包含进服务器名字: server name

VirtualDocumentRoot /www/hosts/%0/docs
VirtualScriptAlias /www/hosts/%0/CGI-bin
2.更为有效的基于 IP 地址的虚拟主机

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

UseCanonicalName DNS
(2)在日志中包含 IP 地址,便于后续分发

LogFormat "%A %h %l %u %t \"%r\" %s %b" vcommon
CustomLog logs/access_log vcommon
(3)在文件路径中包含 IP 地址

VirtualDocumentRootIP /www/hosts/%0/docs
VirtualScriptAliasIP /www/hosts/%0/cgi-bin
二、使用 mod_rewrite

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

(1)从 Host: 头获取服务器名字

UseCanonicalName Off
(2)可分割的日志

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>
(3)接下来是关键部分

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

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

www.customer-1.com /www/customers/1
www.customer-2.com /www/customers/2
...
www.customer-N.com /www/customers/N
(2)http.conf 包含了:

RewriteEngine on
RewriteMap lowercase int:tolower
(3)定义映像文件

RewriteMap vhost txt:/www/conf/vhost.map
(4)和上面的例子一样,处理变名

RewriteCond %{REQUEST_URI} !^/icons/
RewriteCond %{REQUEST_URI} !^/cgi-bin/
RewriteCond ${lowercase:%{SERVER_NAME}} ^(.+)$
(5)这里做基于文件的重新映射

RewriteCond ${vhost:%1} ^(/.*)$
RewriteRule ^/(.*)$ %1/docs/$1
RewriteCond %{REQUEST_URI} ^/cgi-bin/
RewriteCond ${lowercase:%{SERVER_NAME}} ^(.+)$
RewriteCond ${vhost:%1} ^(/.*)$
RewriteRule ^/(.*)$ %1/cgi-bin/$1
.htaccess文件功能
.htaccess文件的功能:"分布式配置文件"提供了针对目录改变配置的方法,即:在一个特定的文档目录中放置一个包含一个或多个指令的文件, 以作用于此目录及其所有子目录。作为用户,所能使用的命令受到限制。管理员可以通过Apache 的AllowOverride指令来设置.子目录中的指令会覆盖更高级目录或者主服务器配置文件中的指令。


一、错误文档的定位

(1)常用的客户端请求错误返回代码:

401 Authorization Required
403 Forbidden
404 Not Found
405 Method Not Allowed
408 Request Timed Out
411 Content Length Required
412 Precondition Failed
413 Request Entity Too Long
414 Request URI Too Long
415 Unsupported Media Type
(2)常见的服务器错误返回代码:

500 Internal Server Error
(3)用户可以利用.htaccess指定自己事先制作好的错误提醒页面。一般情况下,人们可以专门设立一个目录,例如errors放置这些页面。然后再.htaccess中,加入如下的指令:

ErrorDocument 404 /errors/notfound.html
ErrorDocument 500 /errors/internalerror.html
一条指令一行。

上述第一条指令的意思是对于404,也就是没有找到所需要的文档的时候得显示页面为/errors目录下的notfound.html页面。不难看出语法格式为:

ErrorDocument 错误代码 /目录名/文件名.扩展名
如果所需要提示的信息很少的话,不必专门制作页面,直接在指令中使用HTML号了,例如下面这个例子:

ErrorDocument 401 "<body bgcolor=#ffffff>
你没有权限访问该页面!
</body>"
二、文档访问的密码保护要利用.htaccess对某个目录下的文档设定访问用户和对应的密码,首先要做的是生成一个.htpasswd的文本文档,例如:

zheng:y4E7Ep8e7EYV
这里密码经过加密,用户可以自己找些工具将密码加密成.htaccess支持的编码。该文档最好不要放在www目录下,建议放在www根目录文档之外,这样更为安全些。

有了授权用户文档,可以在.htaccess中加入如下指令了:

AuthUserFile .h