目标 |
重写设置 |
说明 |
规范化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 () { |
|
|
$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} !^[email protected]$ |
|
|
RewriteCond %{REMOTE_IDENT}@%{REMOTE_HOST} !^[email protected]$ |
|
|
RewriteCond %{REMOTE_IDENT}@%{REMOTE_HOST} !^[email protected]$ |
|
|
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 |