• 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 ^/(.*) 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 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 ^(/~.+) 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 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/(.*)$ 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.zzxoyo.com/blog/?action=show&id=42
  • 相关阅读:
    win10 x64 1903的miniVT实现ept
    关于wmi的参数拦截
    内核中获取远程名称管道IP
    分享一个之前写的mbr的分析过程
    PassUAC的简单实现(二)
    如何分析加上SE壳的.net程序
    IECVE收集
    _KWAIT_BLOCK使用时遇到的问题
    CVE20160189
    PassUAC的简单实现(一)
  • 原文地址:https://www.cnblogs.com/hubj/p/1367685.html
Copyright © 2020-2023  润新知