apache RewriteRule

最近发现一个新的东西(可能以前一直没有注意) Apache 中的 rewrite_modul 模块。

可以将你的 url 得到的地址直接重新定义成 自己想要的位置。  也就是说 输入的 URL 可以 重新定义成 一个动态的 地址。 而且这个 URL 不会被改写,动态地址是在后台执行然后返回数据。

这个功能还可以使用在 写程序时自己定义的 CACHE ,完全提高服务器负担,加快响应时间,这个就看你怎么使用了。

取消了APACHE 配置文件 http.conf 里LoadModule rewrite_module modules/mod_rewrite.so前面的注释。目录下需要有一个配置文件 .htaccess

内容如下(例子):

RewriteEngine On
RewriteBase /tt/
RewriteCond %{ ENV:REDIRECT_SURI } !^$
RewriteRule (.*) - [L]
RewriteRule ^[[:alnum:]]+/*$ blog/index.php [E=SURI:1,L]
RewriteRule ^[[:alnum:]]+/+[0-9]+$ blog/item.php [E=SURI:1,L]
RewriteRule ^[[:alnum:]]+/+favicon/.ico$ blog/favicon.ico.php [E=SURI:1,L]
RewriteRule ^[[:alnum:]]+/+index/.gif$ blog/index.gif.php [E=SURI:1,L]
RewriteCond %{ QUERY_STRING } (^|&)pl=([0-9]+)
RewriteRule ^[[:alnum:]]+/+index/.php$ %2 [NE,L]
RewriteCond %{ REQUEST_FILENAME } -f [OR]
RewriteCond %{ REQUEST_FILENAME } -d 
RewriteRule !^(blog|cache)/ - [L]      
RewriteRule ^[[:alnum:]]+/+(entry|attachment|category|keylog|tag|search|plugin)/? blog/$1/index.php [E=SURI:1,L]
RewriteRule ^[[:alnum:]]+/+(.+)/[0-9]+$ blog/$1/item.php [E=SURI:1,L]
RewriteRule ^[[:alnum:]]+/+(.+)$ blog/$1/index.php [E=SURI:1,L]

具体内容需要按照自己使用时候不同而设置不同。同样上面的信息可以直接写进 Apache 的 conf 文件里面,用样有效。 如果生成文件后 就只对该目录有效。

Apache 官方的说明书 http://httpd.apache.org/docs/2.0/misc/rewriteguide.html

这个是个很好的东西,还需要具体研究一下。

具体例子如下:

目标重写设置说明
规范化URLRewriteRule ^/~([^/]+)/?(.*) /u/$1/$2 [R] 将/~user重写为/u/user的形式
  RewriteRule ^/([uge])/([^/]+)$ /$1/$2/ [R]将/u/user末尾漏掉的/补上
   
规范化HostNameRewriteCond %{ 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_imapRewriteRule ^/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 ( ) {  
 $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
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值