- 所属分类: 网络文章摘抄 , 虚拟主机综合
- 所属标签: apache, lamp, Mod_rewrite
自己的破服务器上装的是Linux AS4 + Apache1.3 + PHP5.2,这两天为了玩个东西,发现竟然Mod_rewrite没有开启,想来这不成啊,少了这好功能,便有不少东西玩不了了。
于是赶紧把Mod_rewrite打开来,在此,也转一篇比较经典比较详细的关于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://hedong.3322.org/archives/000349.html
参考文献:
URL Rewriting Guide
http://httpd.apache.org/docs/misc/rewriteguide.html
mod_rewrite: A Beginner's Guide to URL Rewriting
http://www.sitepoint.com/article/910
再推荐一个中文的手册:http://www.kreny.com/docs/apache2.0/mod/mod_rewrite.html






我有三言两语要评论: