Chinaunix首页 | 论坛 | 博客
  • 博客访问: 143176
  • 博文数量: 123
  • 博客积分: 5770
  • 博客等级: 大校
  • 技术积分: 1240
  • 用 户 组: 普通用户
  • 注册时间: 2010-02-12 16:31
个人简介

闲情逸致 http://EZ38.com

文章分类

全部博文(123)

文章存档

2014年(1)

2010年(122)

我的朋友
最近访客

分类: LINUX

2010-04-02 10:26:22

Apache的Mod_rewrite 例子


目标 重写设置 说明
规范化URL RewriteRule ^/~([^/]+)/?(.*) /u/$1/$2 [R]  将/~user重写为/u/user的形式
  RewriteRule ^/([uge])/([^/]+)$ /$1/$2/ [R] 将/u/user末尾漏掉的/补上
    
规范化HostName RewriteCond %{HTTP_HOST} !^fully\.qualified\.domain\.name [NC] 域名不合格
  RewriteCond %{HTTP_HOST} !^$ 不空
  RewriteCond %{SERVER_PORT} !^80$ 不是80端口
  RewriteRule ^/(.*) [L,R] 重写
  RewriteCond %{HTTP_HOST} !^fully\.qualified\.domain\.name [NC] 
  RewriteCond %{HTTP_HOST} !^$ 
  RewriteRule ^/(.*) [L,R] 
    
URL根目录转移 RewriteEngine on 
  RewriteRule ^/$ /e/www/ [R] 从/移到/e/www/
    
末尾目录补斜线 RewriteEngine on 
(目录范围内) RewriteBase /~quux/ 
  RewriteRule ^foo$ foo/ [R] /~quux/foo是一个目录,补/
    
  RewriteEngine on 
  RewriteBase /~quux/ 
  RewriteCond %{REQUEST_FILENAME} -d 如果请文件名是个目录
  RewriteRule ^(.+[^/])$ $1/ [R] URL末尾不是斜线时补上
    
Web集群 RewriteEngine on 
  RewriteMap user-to-host txt:/path/to/map.user-to-host 用户-服务器映射
  RewriteMap group-to-host txt:/path/to/map.group-to-host 组-服务器映射
  RewriteMap entity-to-host txt:/path/to/map.entity-to-host 实体-服务器映射
  RewriteRule ^/u/([^/]+)/?(.*)  用户均衡
  RewriteRule ^/g/([^/]+)/?(.*)  组均衡
  RewriteRule ^/e/([^/]+)/?(.*)  实体均衡
  RewriteRule ^/([uge])/([^/]+)/?$ /$1/$2/.www/ 
  RewriteRule ^/([uge])/([^/]+)/([^.]+.+) /$1/$2/.www/$3\  
    
URL根目录搬迁 RewriteEngine on 
  RewriteRule ^/~(.+) [R,L]  到其它服务器
    
所用户名首字母分 RewriteEngine on 
  RewriteRule ^/~(([a-z])[a-z0-9]+)(.*) /home/$2/$1/.www$3  内一层括号为$2
    
NCSA imagemap移 RewriteEngine on 
植为mod_imap RewriteRule ^/cgi-bin/imagemap(.*) $1 [PT]  
    
多目录查找资源 RewriteEngine on 
  # first try to find it in custom/... 
  RewriteCond /your/docroot/dir1/%{REQUEST_FILENAME} -f 
  RewriteRule ^(.+) /your/docroot/dir1/$1 [L] 
  # second try to find it in pub/... 
  RewriteCond /your/docroot/dir2/%{REQUEST_FILENAME} -f 
  RewriteRule ^(.+) /your/docroot/dir2/$1 [L] 
  # else go on for other Alias or ScriptAlias directives, 
  RewriteRule ^(.+) - [PT]  
    
据URL设置环境变量 RewriteEngine on 
  RewriteRule ^(.*)/S=([^/]+)/(.*) $1/$3 [E=STATUS:$2]  
    
虚拟主机 RewriteEngine on 
  RewriteCond %{HTTP_HOST} ^www\.[^.]+\.host\.com$ 基于用户名
  RewriteRule ^(.+) %{HTTP_HOST}$1 [C] 
  RewriteRule ^www\.([^.]+)\.host\.com(.*) /home/$1$2  
    
内外人有别 RewriteEngine on 
  RewriteCond %{REMOTE_HOST} !^.+\.ourdomain\.com$ 基于远程主机
  RewriteRule ^(/~.+) [R,L]  
    
错误重定向 RewriteEngine on 
  RewriteCond /your/docroot/%{REQUEST_FILENAME} !-f 不是regular文件
  RewriteRule ^(.+)  
    
程序处理特殊协议 RewriteRule ^xredirect:(.+) /path/to/nph-xredirect.cgi/$1 \ Xredirect协议
  [T=application/x-httpd-cgi,L]  
    
最近镜像下载 RewriteEngine on 
  RewriteMap multiplex txt:/path/to/map.cxan 顶级域名与最近ftp服务器映射
  RewriteRule ^/CxAN/(.*) %{REMOTE_HOST}::$1 [C] 
  RewriteRule ^.+\.([a-zA-Z]+)::(.*)$ ${multiplex:$1|ftp.default.dom}$2 [R,L]  据顶级域名不同提供不同的FTP服务器
    
基于时间重写 RewriteEngine on 
  RewriteCond %{TIME_HOUR}%{TIME_MIN} >0700 
  RewriteCond %{TIME_HOUR}%{TIME_MIN} <1900 
  RewriteRule ^foo\.html$ foo.day.html 白天为早晚7点间
  RewriteRule ^foo\.html$ foo.night.html  其余为夜间
    
向前兼容扩展名 RewriteEngine on 
  RewriteBase /~quux/ 
  # parse out basename, but remember the fact 
  RewriteRule ^(.*)\.html$ $1 [C,E=WasHTML:yes] 
  # rewrite to document.phtml if exists 
  RewriteCond %{REQUEST_FILENAME}.phtml -f 如果存在$1.phtml则重写
  RewriteRule ^(.*)$ $1.phtml [S=1] 
  # else reverse the previous basename cutout 
  RewriteCond %{ENV:WasHTML} ^yes$ 如果不存在$1.phtml,则保持不变
  RewriteRule ^(.*)$ $1.html  
    
文件改名(目录级) RewriteEngine on 内部重写
  RewriteBase /~quux/ 
  RewriteRule ^foo\.html$ bar.html  
    
  RewriteEngine on 重定向由客户端再次提交
  RewriteBase /~quux/ 
  RewriteRule ^foo\.html$ bar.html [R]  
    
据浏览器类型重写 RewriteCond %{HTTP_USER_AGENT} ^Mozilla/3.* 
  RewriteRule ^foo\.html$ foo.NS.html [L] 
  RewriteCond %{HTTP_USER_AGENT} ^Lynx/.* [OR] 
  RewriteCond %{HTTP_USER_AGENT} ^Mozilla/[12].* 
  RewriteRule ^foo\.html$ foo.20.html [L] 
  RewriteRule ^foo\.html$ foo.32.html [L]  
    
动态镜像远程资源 RewriteEngine on 
  RewriteBase /~quux/ 
  RewriteRule ^hotsheet/(.*)$ [P] 利用了代理模块
    
  RewriteEngine on 
  RewriteBase /~quux/ 
  RewriteRule ^usa-news\.html$ [P] 
    
反向动态镜像 RewriteEngine on 
  RewriteCond /mirror/of/remotesite/$1 -U  
  RewriteRule ^\.remotesite\.com/(.*)$ /mirror/of/remotesite/$1  
    
负载均衡 RewriteEngine on 利用代理实现round-robin效果
  RewriteMap lb prg:/path/to/lb.pl 
  RewriteRule ^/(.+)$ ${lb:$1} [P,L] 
    
  #!/path/to/perl 
  $| = 1; 
  $name = "www"; # the hostname base 
  $first = 1; # the first server (not 0 here, because 0 is myself)  
  $last = 5; # the last server in the round-robin 
  $domain = "foo.dom"; # the domainname 
  $cnt = 0; 
  while () { 
  $cnt = (($cnt+1) % ($last+1-$first)); 
  $server = sprintf("%s%d.%s", $name, $cnt+$first, $domain); 
  print "_"; 
  } 
  ##EOF## 
    
静态页面变脚本 RewriteEngine on 
  RewriteBase /~quux/ 
  RewriteRule ^foo\.html$ foo.cgi [T=application/x-httpd-cgi]  
    
阻击机器人 RewriteCond %{HTTP_USER_AGENT} ^NameOfBadRobot.*  
  RewriteCond %{REMOTE_ADDR} ^123\.45\.67\.[8-9]$ 
  RewriteRule ^/~quux/foo/arc/.+ - [F]  
    
阻止盗连你的图片 RewriteCond %{HTTP_REFERER} !^$  
  RewriteCond %{HTTP_REFERER} !^.quux-corp.de/~quux/.*$ [NC] 自己的连接可不能被阻止
  RewriteRule .*\.gif$ - [F] 
    
  RewriteCond %{HTTP_REFERER} !^$  
  RewriteCond %{HTTP_REFERER} !.*/foo-with-gif\.html$ 
  RewriteRule ^inlined-in-foo\.gif$ - [F] 
    
拒绝某些主机访问 RewriteEngine on 
  RewriteMap hosts-deny txt:/path/to/hosts.deny 
  RewriteCond ${hosts-deny:%{REMOTE_HOST}|NOT-FOUND} !=NOT-FOUND [OR] 
  RewriteCond ${hosts-deny:%{REMOTE_ADDR}|NOT-FOUND} !=NOT-FOUND 
  RewriteRule ^/.* - [F]  
    
用户授权 RewriteCond }  
  RewriteCond }  
  RewriteCond }  
  RewriteRule ^/~quux/only-for-friends/ - [F]  
    
外部重写程序模板 RewriteEngine on 
  RewriteMap quux-map prg:/path/to/map.quux.pl 
  RewriteRule ^/~quux/(.*)$ /~quux/${quux-map:$1} 
    
  #!/path/to/perl 
  $| = 1; 
  while (<>) { 
  s|^foo/|bar/|; 
  print $_; 
  } 
    
搜索引擎友好 RewriteRule ^/products$ /content.php  
  RewriteRule ^/products/([0-9]+)$ /content.php?id=$1  
  RewriteRule ^/products/([0-9]+),([ad]*),([0-9]{0,3}),([0-9]*),([0-9]*$) /marso/content.php?id=$1&sort=$2&order=$3&start=$4 
参考文献:
URL Rewriting Guide

mod_rewrite: A Beginner's Guide to URL Rewriting
 
阅读(459) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~