Apache的ReWrite的应用mod_rewrite模块使用(3)

来源:asp之家 时间:2010-04-04 18:44:00 


结构化的宿主目录
说明:
一些拥有几千个用户的网站通常都使用结构化的宿主目录规划,即,每个宿主目录位于一个带有特定前缀比如其用户名的第一个字符的子目录下。那么,/~foo/anypath代表/home/f/foo/.www/anypath,而/~bar/anypath代表/home/b/bar/.www/anypath。
方案:
可以使用下列规则集来扩展~以达到上述目的。
代码:
RewriteEngine on
RewriteRule ^/~(([a-z])[a-z0-9]+)(.*) /home/$2/$1/.www$3
文件系统的重组
说明:
这是一个不加雕琢的例子:一个大量使用针对目录的规则集以实现平滑观感,而从来不用调整数据结构的杀手级的应用。背景:net.sw从1992年开始,存放了我收集的免费的有效的Unix软件包。它是我的爱好也是我的工作,因为在学习计算机科学的同时,业余时间还做了多年的系统和网络的管理员。每周我都需要整理软件,因而建立了一个层次很深的目录结构来存放各种软件包:
代码:
drwxrwxr-x 2 netsw users 512 Aug 3 18:39 Audio/
drwxrwxr-x 2 netsw users 512 Jul 9 14:37 Benchmark/
drwxrwxr-x 12 netsw users 512 Jul 9 00:34 Crypto/
drwxrwxr-x 5 netsw users 512 Jul 9 00:41 Database/
drwxrwxr-x 4 netsw users 512 Jul 30 19:25 Dicts/
drwxrwxr-x 10 netsw users 512 Jul 9 01:54 Graphic/
drwxrwxr-x 5 netsw users 512 Jul 9 01:58 Hackers/
drwxrwxr-x 8 netsw users 512 Jul 9 03:19 InfoSys/
drwxrwxr-x 3 netsw users 512 Jul 9 03:21 Math/
drwxrwxr-x 3 netsw users 512 Jul 9 03:24 Misc/
drwxrwxr-x 9 netsw users 512 Aug 1 16:33 Network/
drwxrwxr-x 2 netsw users 512 Jul 9 05:53 Office/
drwxrwxr-x 7 netsw users 512 Jul 9 09:24 SoftEng/
drwxrwxr-x 7 netsw users 512 Jul 9 12:17 System/
drwxrwxr-x 12 netsw users 512 Aug 3 20:15 Typesetting/
drwxrwxr-x 10 netsw users 512 Jul 9 14:08 X11/

1996年7月,我决定通过一个漂亮的Web接口公开我的收藏。“漂亮”是指提供一个接口以直接浏览整个目录结构,同时不对这个结构做任何改变 - 甚至也不在结构顶部放置CGI脚本。为什么呢?因为这个结构还要能够被FTP访问,而且我不希望其中有任何Web或者CGI的成分。

方案:

这个方案分为两个部分:第一个部分,是用于在空闲时间建立所有目录页面的CGI脚本集。我把它们放在/e/netsw/.www/,如下:
代码:
-rw-r--r-- 1 netsw users 1318 Aug 1 18:10 .wwwacl
drwxr-xr-x 18 netsw users 512 Aug 5 15:51 DATA/
-rw-rw-rw- 1 netsw users 372982 Aug 5 16:35 LOGFILE
-rw-r--r-- 1 netsw users 659 Aug 4 09:27 TODO
-rw-r--r-- 1 netsw users 5697 Aug 1 18:01 netsw-about.html
-rwxr-xr-x 1 netsw users 579 Aug 2 10:33 netsw-access.pl
-rwxr-xr-x 1 netsw users 1532 Aug 1 17:35 netsw-changes.cgi
-rwxr-xr-x 1 netsw users 2866 Aug 5 14:49 netsw-home.cgi
drwxr-xr-x 2 netsw users 512 Jul 8 23:47 netsw-img/
-rwxr-xr-x 1 netsw users 24050 Aug 5 15:49 netsw-lsdir.cgi
-rwxr-xr-x 1 netsw users 1589 Aug 3 18:43 netsw-search.cgi
-rwxr-xr-x 1 netsw users 1885 Aug 1 17:41 netsw-tree.cgi
-rw-r--r-- 1 netsw users 234 Jul 30 16:35 netsw-unlimit.lst
其中的DATA/子目录包含了上述目录结构,即实在的net.sw,由rdist在需要的时候自动更新。第二个部分的遗留问题是:如何连接这两个结构为一个平滑观感的URL树?我希望在运行适当的CGI脚本而使用各种URL的时候,使用户感觉不到DATA/目录的存在。方案如下:首先,我把下列配置放在服务器上DocumentRoot中的针对目录的配置文件里,以重写公布的URL /net.sw/ 为内部路径 /e/netsw:
代码:
RewriteRule ^net.sw$ net.sw/ [R]
RewriteRule ^net.sw/(.*)$ e/netsw/$1
第一条规则是针对遗漏后缀斜杠的请求的!第二条规则才是真正实现功能的。接着,就是放在针对目录的配置文件/e/netsw/.www/.wwwacl中的杀手级的配置了:
代码:
Options ExecCGI FollowSymLinks Includes MultiViews
RewriteEngine on
# we are reached via /net.sw/ prefix
RewriteBase /net.sw/
# first we rewrite the root dir to
# the handling cgi script
RewriteRule ^$ netsw-home.cgi [L]
RewriteRule ^index.html$ netsw-home.cgi [L]
# strip out the subdirs when
# the browser requests us from perdir pages
RewriteRule ^.+/(netsw-[^/]+/.+)$ $1 [L]
# and now break the rewriting for local files
RewriteRule ^netsw-home.cgi.* - [L]
RewriteRule ^netsw-changes.cgi.* - [L]
RewriteRule ^netsw-search.cgi.* - [L]
RewriteRule ^netsw-tree.cgi$ - [L]
RewriteRule ^netsw-about.html$ - [L]
RewriteRule ^netsw-img/.*$ - [L]
# anything else is a subdir which gets handled
# by another cgi script
RewriteRule !^netsw-lsdir.cgi.* - [C]
RewriteRule (.*) netsw-lsdir.cgi/$1
阅读提示:
注意前半部分中的标志L(最后),和无对应项('-')
注意后半部分中的符号!(非),和标志C (链)
注意最后一条规则的全匹配模式
代码:
NCSA imagemap和Apache mod_imap
说明:
许多人都希望在从NCSA网站服务器向较现代的Apache网站服务器转移中实现平滑过渡,即希望老的NCSA imagemap程序能在Apache的较现代的mod_imap支持下正常运作。但问题在于,到处都是通过/cgi-bin/imagemap/path/to/page.map引用imagemap程序的连接,而在Apache下,应该写成/path/to/page.map。
方案:
使用全局规则在空闲时间去除所有这些请求的前缀:
代码:
RewriteEngine on
RewriteRule ^/cgi-bin/imagemap(.*) $1 [PT]

标签:apache,mod_rewrite,url,rewrite,虚拟主机,服务器
0
投稿

猜你喜欢

  • 基于Docker搭建Redis一主两从三哨兵的实现

    2021-07-08 07:44:17
  • 张赟:揭露SEO的主心骨 SEO将不再神秘

    2009-09-08 11:30:00
  • 网络时代人们最信任哪种广告?

    2007-10-09 19:52:00
  • 用Java编程实现SMTP服务器功能

    2010-03-13 18:46:00
  • DedeCMS V5.3自定义模型使用教程详解

    2009-01-06 14:33:00
  • Linux服务器被黑客攻击的检测

    2009-10-27 08:54:00
  • Windows2003服务器安装及设置教程—IIS优化篇二—使用eAccelerator加速PHP

    2010-02-09 21:03:00
  • 如何增加Google反向链接?

    2008-03-10 12:51:00
  • 老谢:企业软文宣传

    2009-04-02 17:13:00
  • 百度联盟:如何匹配相关度高的推广信息

    2009-04-14 10:25:00
  • windows2003服务器上IIS占用CPU资源100%的解决办法

    2010-04-23 17:57:00
  • 论坛推广四要素

    2010-03-07 16:30:00
  • Linux nohup实现后台运行程序及查看(nohup与&)

    2023-06-29 20:35:13
  • 雅虎拟新建办公园区 可容纳一万两千名员工

    2009-11-27 15:49:00
  • 网站搜索引擎优化中(SEO)的十八条军规

    2009-03-25 11:11:00
  • 基于Docker实现Redis主从+哨兵搭建的示例实践

    2022-02-17 20:43:14
  • PHPWind v7.3.2开启门户模式为默认后打开read页面导致浏览器死掉问题

    2009-05-31 17:18:00
  • 使用Docker创建FTP服务器的过程解析

    2021-06-20 15:10:44
  • 百度如何判断网站文章是否原创

    2008-12-22 09:41:00
  • 淘宝技术发展(Oracle、支付宝、旺旺)

    2012-03-05 20:10:01
  • asp之家 网站运营 m.aspxhome.com