设为首页 收藏本站
查看: 670|回复: 0

[经验分享] Apache的Mod_rewrite 例子(转)

[复制链接]

尚未签到

发表于 2017-1-8 07:34:53 | 显示全部楼层 |阅读模式
  转自dreamwaver的博客(http://dreamwaver.bokee.com/5692845.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 (<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

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-325268-1-1.html 上篇帖子: 利用APACHE WEB日志挖掘搜索引擎 下篇帖子: Apache流量控制及连接数限制
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表