用rewrite可实现的部分:URL根目录搬迁,多目录查找资源,阻止盗连你的图片,拒绝某些主机访问,基于时间重写,据浏览器类型重写,动态镜像远程资源,外部重写程序模板,等等

详见下表:

目标 重写设置 说明
规范化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 ^/(.*) http://fully.qualified.domain.name:%{SERVER_PORT}/$1 [L,R] 重写
  RewriteCond %{HTTP_HOST} !^fully\.qualified\.domain\.name [NC]  
  RewriteCond %{HTTP_HOST} !^$  
  RewriteRule ^/(.*) http://fully.qualified.domain.name/$1 [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/([^/]+)/?(.*) http://${user-to-host:$1|server0}/u/$1/$2 用户均衡
  RewriteRule ^/g/([^/]+)/?(.*) http://${group-to-host:$1|server0}/g/$1/$2 组均衡
  RewriteRule ^/e/([^/]+)/?(.*) http://${entity-to-host:$1|server0}/e/$1/$2 实体均衡
  RewriteRule ^/([uge])/([^/]+)/?$ /$1/$2/.www/  
  RewriteRule ^/([uge])/([^/]+)/([^.]+.+) /$1/$2/.www/$3\  
     
URL根目录搬迁 RewriteEngine on  
  RewriteRule ^/~(.+) http://newserver/~$1 [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 Alias 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 ^(/~.+) http://www.somewhere.com/$1 [R,L]  
     
错误重定向 RewriteEngine on  
  RewriteCond /your/docroot/%{REQUEST_FILENAME} !-f 不是regular文件
  RewriteRule ^(.+) http://webserverB.dom/$1  
     
程序处理特殊协议 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 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/(.*)$ http://www.tstimpreso.com/hotsheet/$1 [P] 利用了代理模块
     
  RewriteEngine on  
  RewriteBase /~quux/  
  RewriteRule ^usa-news\.html$ http://www.quux-corp.com/news/index.html [P]  
     
反向动态镜像 RewriteEngine on  
  RewriteCond /mirror/of/remotesite/$1 -U  
  RewriteRule ^http://www\.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 (<STDIN>) {  
  $cnt = (($cnt+1) % ($last+1-$first));  
  $server = sprintf(“%s%d.%s”, $name, $cnt+$first, $domain);  
  print “http://$server/$_”;  
  }  
  ##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} !^http://www.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 %{REMOTE_IDENT}@%{REMOTE_HOST} !^friend1@client1.quux-corp\.com$  
  RewriteCond %{REMOTE_IDENT}@%{REMOTE_HOST} !^friend2@client2.quux-corp\.com$  
  RewriteCond %{REMOTE_IDENT}@%{REMOTE_HOST} !^friend3@client3.quux-corp\.com$  
  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

转载请注明出处:http://www.onexin.net/?p=3114

Apache rewrite 详解的更多相关文章

  1. Nginx Rewrite详解

    Nginx Rewrite详解 引用链接:http://blog.cafeneko.info/2010/10/nginx_rewrite_note/ 原文如下: 在新主机的迁移过程中,最大的困难就是W ...

  2. (原创)LAMP搭建之二:apache配置文件详解(中英文对照版)

    LAMP搭建之二:apache配置文件详解(中英文对照版) # This is the main Apache server configuration file. It contains the # ...

  3. 转: Apache SSI详解及应用

    转: Apache SSI详解及应用 什么是 SSI? SSI(Server Side Includes),是嵌套在 HTML 网页中的指示语句,由后台服务器进行代码的解释计算.使用 SSI 可以动态 ...

  4. apache配置文件详解与优化

    apache配置文件详解与优化 一.总结 一句话总结:结合apache配置文件中的英文说明和配置详解一起看 1.apache模块配置用的什么标签? IfModule 例如: <IfModule ...

  5. Apache伪静态Rewrite详解

    一.Rewrite规则简介:Rewirte主要的功能就是实现URL的跳转,它的正则表达式是基于 Perl语言.可基于服务器级的(httpd.conf)和目录级的 (.htaccess)两种方式.如果要 ...

  6. Web性能压力测试工具之Apache AB 详解

    下载安装地址: http://httpd.apache.org/download.cgi yum install httpd-tools http://www.apachelounge.com/dow ...

  7. apache配置详解

    可参考:Apache 的 httpd.conf 详解 ServerTokens OS 此指令控制了Server回送给客户端的回应头域是否包含关于服务器OS类型和编译进的模块描述信息.服务器会发送:Se ...

  8. Apache日志详解

    在渗透测试的工作中,WEB网站的日志是非常重要的,今天总结了一些关于调配Apache日志的一些东西. 0x00 Apache日志文件名称及路径介绍 我们安装好Apache后,Apache的配置文件(h ...

  9. yum方式安装的Apache目录详解和配置说明

    在对httpd.conf文件进行解读之前,首先了解一下Redhat9中Apache服务器默认配置的一些基本信息:配置文件:/etc/httpd/conf/http.conf1)"/etc/h ...

随机推荐

  1. 使用BusyBox制作嵌入式Linux根文件系统

    STEP 1:构建目录结构  创建根文件系统目录,主要包括以下目录/dev  /etc /lib  /usr  /var /proc /tmp /home /root /mnt /bin  /sbin ...

  2. 声明顺序 (Bootstrap 编码规范)

    相关的属性声明应当归为一组,并按照下面的顺序排列: Positioning Box model Typographic Visual 由于定位(positioning)可以从正常的文档流中移除元素,并 ...

  3. android数据库(随apk一起发布数据库)

    读取数据库+数据库版本更新 注意: a, 将随apk发布的数据库放在android工程下/res/raw路径下. b, 数据库文件存到手机上时,路径在/data/data/你的包名/databases ...

  4. HDU 3533 Escape BFS搜索

    题意:懒得说了 分析:开个no[100][100][1000]的bool类型的数组就行了,没啥可说的 #include <iostream> #include <cstdio> ...

  5. Selenium的PageFactory在大型项目中的应用

    出路出路,走出去了,总是会有路的:困难苦难,困在家里就是难. 因为最近遇到的技术问题一直没找到可行的解决办法,一直在翻看selenium的源代码,之前写测试代码的时候就是拿来即用,写什么功能啊,就按手 ...

  6. HOG:从理论到OpenCV实践

    (转载请注明出处:http://blog.csdn.net/zhazhiqiang/ 未经允许请勿用于商业用途) 一.理论 1.HOG特征描述子的定义:     locally normalised ...

  7. Notepad++中调用cl.exe编译器(Windows)

    Notepad++中调用cl.exe编译器(Windows) 近来在notepad++中写代码,写完后总是习惯性的想去VS里面编译一下,看看代码是否有误.但有时候一些零碎的小文件总是懒得再VS中打开, ...

  8. Node.js中的ORM

    ORM2是一款基于Node.js实现的ORM框架,名字相当的霸气,算是同类框架中非常出色的一款,具体介绍请猛击:https://github.com/dresende/node-orm2 刚接触Nod ...

  9. Visual Studio 2015 编译错误【错误 C4996 'vsprintf': This function or variable may be unsafe. Consider using vsprintf_s instead. 】的解决方案

    错误提示信息: 错误 C4996 'vsprintf': This function or variable may be unsafe. Consider using vsprintf_s inst ...

  10. SRM 599 DIV 2

    rating又掉了...变灰色了%>_<%.250pt很简单,一眼看上去是个背包,没有多想立马写了个01背包,后面发现其实就是个简单的排序...因为只是需要求数量而已.500pt被我写残了 ...