Apache的ReWrite的应用mod_rewrite模块使用
来源:asp之家 发布时间:2010-04-04 18:44:00
Apache的mod_rewrite是提供了强大URL操作的杀手级的模块,可以实现几乎所有你梦想的URL操作类型,其代价是你必须接受其复杂性,因为mod_rewrite的主要障碍就是初学者不容易理解和运用,即使是Apache专家有时也会发掘出mod_rewrite的新用途。
换句话说:对mod_rewrite,或者是打退堂鼓永不再用,或者是喜欢它并一生受用。上,一个资源会拥有多个URL,在实际应用和发布中应该被使用的是规范的URL,其他的则是简写或者是内部使用的。无论用户在请求中使用什么形式的URL,他最终看见的都应该是规范的URL。
说明:
在有些网站服务器上,一个资源会拥有多个URL,在实际应用和发布中应该被使用的是规范的URL,其他的则是简写或者是内部使用的。无论用户在请求中使用什么形式的URL,他最终看见的都应该是规范的URL。
方案:
对所有的不规范的URL执行一个外部的HTTP重定向,以改变它在浏览器地址栏中的显示及其后继的请求。下例中的规则集用规范的/u/user替换/~user,并修正了/u/user所遗漏的后缀的斜杠。
代码:
RewriteRule ^/~([^/]+)/?(.*) /u/$1/$2 [R]
RewriteRule ^/([uge])/([^/]+)$ /$1/$2/ [R]
规范的主机名
说明:
...
方案:
代码:
RewriteCond % !^fully.qualified.domain.name [NC]
RewriteCond % !^$
RewriteCond % !^80$
RewriteRule ^/(.*) http://fully.qualified.domain.name:%/$1 [L,R]
RewriteCond % !^fully.qualified.domain.name [NC]
RewriteCond % !^$
RewriteRule ^/(.*) http://fully.qualified.domain.name/$1 [L,R]
被移动过的DocumentRoot
说明:
通常,网站服务器的DocumentRoot直接对应于URL"/",但是,它常常不是处于最高一级,而可能只是众多数据池中的一个实体。比如,在Intranet站点中,有/e/www/(WWW的主页)、/e/sww/ (Intranet的主页)等等,而DocumentRoot指向了/e/www/,则必须保证此数据池中的所有内嵌的图片和其他元素对后继请求有效。
方案:
只须重定向URL /到/e/www/即可。这个方案看起来很简单,但只是有了mod_rewrite模块的支持,它才简单,因为传统的URL Aliases机制(由mod_alias及其相关模块提供)只是作了一个前缀匹配,DocumentRoot是一个对所有URL的前缀,因而无法实现这样的重定向。而用mod_rewrite的确很简单:
代码:
RewriteEngine on
RewriteRule ^/$ /e/www/ [R]
后缀斜杠的问题
说明:
每个网管对引用目录后缀斜杠的问题都有一本苦经,如果遗漏了,服务器会产生一个错误,因为如果请求是/~quux/foo而不是/~quux/foo/,服务器会去找一个叫foo的文件,而它是一个目录,所以就报错了。事实上,大多数情况下,它自己会试图修正这个错误,但是有时候需要你手工纠正,比如,在重写了许多CGI脚本中的复杂的URL以后。
方案:
解决这个微妙问题的方案是让服务器自动添加后缀的斜杠。对此,必须使用一个外部的重定向,使浏览器正确地处理后继的对诸如图片的请求。如果仅仅作一个内部的重写,可能只对目录页面有效,而对内嵌有使用相对URL的图片的页面则无效,因为浏览器有请求内嵌目标的可能。比如,如果不用外部重定向,/~quux/foo/index.html页面中对image.gif的请求,其结果将是/~quux/image.gif!。
所以,应该这样写:
代码:
RewriteEngine on
RewriteBase /~quux/
RewriteRule ^foo$ foo/ [R]
又懒又疯狂的做法是把这些写入其宿主目录中的顶级.htaccess中,但是须注意,如此会带来一些处理上的开销。
代码:
RewriteEngine on
RewriteBase /~quux/
RewriteCond % -d
RewriteRule ^(.+[^/])$ $1/ [R]


猜你喜欢
- 在Godaddy注册一个域名,还可以获得Godaddy赠送的一个10G的免费空间。虽然是免费空间,速度还挺快的,容量也蛮大,遗憾的是网页顶部
- 最近一些日子在学习有关于虚拟机VirtualBox,现在分享给大家参考一下。一、虚拟机网络配置默认只是设置了网卡1:方式NAT(对应ifcf
- 本人亲身经验,站长建站,百度最快11天3号就收录了,google慢点11月9号才收录,不过10天之内能收录还是归功于以下方法!1.在忙活了一
- 以百万富翁为诱饵在观众面前,一问一答,再问抢答,过五关斩六将,最终胜利者将获得百万大奖。这种“百万富翁&rdqu
- 一、搭建1、准备htpasswd.txt文件该文件内容包含上传包至仓库时验证的用户名和密码pip install htpasswdhtpas
- 本文介绍了Centos6.9安装vsftpd并配置多用户的方法,分享给大家,具体如下:一、安装vsftpd#安装vsftpdyum -y i
- 自从2004年芙蓉姐姐横空出世,神话到处流传至今无人超越,又谣传芙蓉姐姐去韩国整容之后美貌值暴涨。小编好奇之下用美图秀秀图片处理软件,借用芙
- 内裤说,第一次拿Google AdSense Dollar,要记一下,那我就记一下。终于拿到了传说中的Google AdSense
- 北京时间11月18日消息,据国外媒体报道,科技博客Techcrunch作者MG·斯格勒(MG Siegler)周二撰文
- 虚拟化1、环境Centos7.3关闭selinux,关闭防火墙2、虚拟化环境配置2.1 kvm部署安装1、 VMware 配置桥接模式2、b
- 服务器上有一个任务进程,当我们使用ps -ef | grep task查看时,只能得到一些最基本的信息,假如我们需要知道对应的文件路径、启动
- 很多互联网的从业人员都在为自己的网站没有ip,没有销售额而苦恼,有些朋友很急躁,根本找不到真正推广的思路,只是像没头苍蝇一样乱撞,来到一个论
- google adsense的搜索广告,有二种形式,一是传统的搜索框,二是不久前推出的“搜索联盟”。这二种有何区别呢?下面做一下介绍。一、搜
- 我从05年底开始写博客到07年10月21日开始固定使用Wordpress,不知不觉已经两年多了。使用独立博客期间,换过很多次空间,从国内搬到
- 第一步:数据表修改首先将数据表中的keyword的varchar()改为varchar(任意长度,例如200)dede_archivesde
- 10月11日,MySpace聚友网今天在北京举行发布会,宣布著名歌手张靓颖正式入驻MySpace聚友网,在她生日当天正式启动MySpace聚
- 喜欢非主流的我们,容易伤感,更喜欢用一些伤感图作为QQ签名图。不过,你知道如何制作这种伤感图片么?其实没那么难,不用PS,因为时下有很多操作
- 大纲内容一、什么是虚拟化二、主流虚拟化技术三、系统虚拟化的用处四、个人用虚拟机软件介绍五、安装VMware workstation六、VMw
- 对于搜索引擎来说,一个网页的<meta name="keywords" content=".......
- 老网民们大概都记得,刚开始上网的时候,是不存在验证码(capcha)这么一种东西的。这造成的结果是,垃圾评论和垃圾邮件可以轻松通过任何一个网