第一步,从这里下载Apache。
第二步,解压缩下载的Apache文件。这里我们下载的文件名假定为httpd-2.2.6.tar.gz。
tar xvfz httpd-2.2.6.tar.gz
第三步,编译和安装。这里我们将mod_rewrite模块通过DSO机制在运行时动态加载, apache被安装在$PREFIX(比如/usr/local)下面。
cd httpd-2.2.6./configure --prefix=$PREFIX --enable-rewrite=sharedmakemake install
$PREFIX/bin/apachectl -k start
访问一下,看一下localhost可以看到apache的默认页面。
此模块提供了一个基于正则表达式分析器的重写引擎来实时重写URL请求。它支持每个完整规则可以拥有不限数量的子规则以及附加条件规则的灵活而且强大的URL操作机制。此URL操作可以依赖于各种测试,比如服务器变量、环境变量、HTTP头、时间标记,甚至各种格式的用于匹配URL组成部分的查找数据库。此模块可以操作URL的所有部分(包括路径信息部分),在服务器级的(httpd.conf)和目录级的(.htaccess)配置都有效,还可以生成最终请求字符串。此重写操作的结果可以是内部子处理,也可以是外部请求的转向,甚至还可以是内部代理处理。
比如,我们要将/~tom重定向到/u/tom,可以利用标准URL重定向。
RewriteRule ^/~([^/]+)/?(.*) /u/$1/$2 [R]
比如,将强制用户使用www.example.com代替exaple.com。
RewriteCond %{HTTP_HOST} !^fully\.qualified\.domain\.name [NC]
RewriteCond %{HTTP_HOST} !^$
RewriteRule ^/(.*) http://fully.qualified.domain.name/$1 [L,R]
比如将指向/重定向到/about。
RewriteEngine onRewriteRule ^/$ /about/ [R]
比如,将/~user/重定向到http://newserver/~user/。
RewriteEngine onRewriteRule ^/~(.+) http://newserver/~$1 [R,L]
比如我们要实现这样的一个域名www.username.host.domain.com(这点对于zeuux自由网站系统有用)。
RewriteEngine onRewriteCond %{HTTP_HOST} ^www\.[^.]+\.host\.com$RewriteRule ^(.+) %{HTTP_HOST}$1 [C]RewriteRule ^www\.([^.]+)\.host\.com(.*) /home/$1$2
比如我们要实现一个这样的功能,对于晚上和白天提供不同风格的网页,可以这样做。
RewriteEngine onRewriteCond %{TIME_HOUR}%{TIME_MIN} >0700RewriteCond %{TIME_HOUR}%{TIME_MIN} <1900RewriteRule ^index\.html$ index.day.htmlRewriteRule ^index\.html$ index.night.htm
很多网络爬虫不遵守在/robots.txt文件中定义的"Robot Exclusion Protocol", 可以禁掉。不如我们要保护/private/memeber
RewriteCond %{HTTP_USER_AGENT} ^NameOfBadRobot.*RewriteCond %{REMOTE_ADDR} ^123\.45\.67\.[8-9]$RewriteRule ^/private/memeber/.+ - [F]
如果mod_rewrite不满足你的要求,可以通过外部程序扩展。例如,
RewriteEngine onRewriteMap zeuux-map prg:/home/zeuux/map.zeuux.plRewriteRule ^/~zeuux/(.*)$ /~zeuux/${zeuux-map:$1}
#!/path/to/perl# disable buffered I/O which would lead# to deadloops for the Apache server$| = 1;# read URLs one per line from stdin and# generate substitution URL on stdoutwhile (<>>) {s|^foo/|bar/|;print $_;}
修改httpd.conf文件,确保有如下项:
# AccessFileName: The name of the file to look for in each directory
# for access control information.
#
AccessFileName .htaccess
# "/var/www/cgi-bin" should be changed to whatever your ScriptAliased
# CGI directory exists, if you have that configured.
#
AllowOverride AuthConfig
Options None
Order allow,deny
Allow from all
第一项说明,用于身份认证的文件名是.htaccess,第二项是对你要限制的目录进行相应的配置,例子里是要限制cgi-bin目录的访问。修改httpd.conf文件以后,需要重新启动httpd守护进程,才能使配置生效。命令如下:
apachectl restart
在/etc目录下,使用htpasswd命令建立password文件:
htpasswd -c htpasswd root
然后在待限制的目录里(cgi-bin)建立.htaccess文件,内容如下:
AuthUserFile /etc/htpasswdAuthName "zeuux.org Auth"AuthType BasicRequire valid-user
此时,已经建立了对cgi-bin目录的WEB访问,即此时再通过WEB访问该目录内的内容时,需要如下的认证:
用户:root
口令:xxx
―――――――――――――――――――――――――――――――――――――――
设定apache的URL访问控制功能:
在httpd.conf里做如下的设定:
< Location /cgi-bin/cvsweb.cgi/ns210402/src/kernel>Order deny,allowDeny from allAllow from 10.1.2.30 10.1.2.91 10.1.2.230 10.1.2.15</Location>
经过上面的设定,/cgi-bin/cvsweb.cgi/ns210402/src/kernel目录(WEB宿主目录)只能由上述几个IP地址访问。实现了基于URL的安全功能。
联系客服