http://www.loosky.net/?p=774
Apache 以其极高的性价比让越来越多的公司组织选择它作为服务器。其中它有一个很有用的功能就是mod_rewrite模块,一个可将用户请求的URI根据特定规则转换的模块。 这篇文章将引领你学习rewrite 规则,正则表达,rewrite条件,以及提供了一系列的例子。 首先,我假设你已经懂得URI 重写对你网站的意义为前提,如果对这一方面你想了解得更多,这里我向你推荐 mod_rewrite: A Beginner’s Guide to URL Rewriting 这本书。你可以从书中找到关于这方面得更多信息。 测试服务器安装 一些服务器没有开启mod_rewrite模块(服务器默认关闭),你可以键入一行PHP代码来确定你的服务器是否已经开启mod_rewrite模块: phpinfo(); 在浏览器运行这段代码,找到Apache Modules section,如果mod_rewrite没有出现在其列表中,那么你就需要通知你的服务商开启mod_rewrite服务,或者..换另外一个好的服 务商。大多数服务商都会开启mod_rewrite模块,所以你很容易找到。 mod_rewrite的魔力 简单举例:创建三个文件,分别命名为 test.html,test.php和.htaccess test.html 输入: This is the HTML file.
test.php输入: This is the php file.
.htaccess输入: RewriteEngine on RewriteRule ^/?test.html$ test.php [L] 将以上三个文件放test测试文件夹下,在浏览器录入: http://www.example.com/test/test.html 在浏览器中将 www.example.com替换成你自己的域名。如果运行结果显示“This is the PHP file”,那么运行成功,如果结果显示“This is the Html file”,那么肯定是哪里出了问题,请你再仔细检查下。 如果你测试成功,你是否发现了我们录入了test.html的文件名,确执行了test.php文件,是的,你已经初识了mod_rewrite的神奇。 mod_rewrite 正则表达式 现在我们可以重写URLs了!设想我们有一个显示城市信息的网站。根据URI选择城市:http://www.example.com/display.php?country=USA &state=California&city=San_Diego 这个URL太长并且对用户也不友好,我们更希望写成这样: http://www.example.com/USA/California/San_Diego 我们需要告诉Apache新的URL会根据一定的格式转化成这样,为了让display.php明白查询的字符,所以我们将用到正则表达式 告诉mod_rewrite匹配我们的URLs。如果你对正则表达式不太熟悉,许多网站提供了优秀的教程供你学习。在本文的末尾,我也会列举出比较好的参 考网址。如果你还是不能明白我所讲述的,那么我建议你看看后面链接中的前两篇。 一个最常用的正则就是(.)。它含有两个元素:一是“点”,表示任 意字符;二是“星”,表示以前的全部字符。所以(.)会匹配{REQUEST_URI}的所有字符。{REQUEST_URI}是URL中出去域名以及 “?”符号的所有查询字符,也是Apache 重写技术尝试匹配的字符。 包裹在正则表达式中的元素存放在“原子”内,它是在规则范围内允许被匹配的变量,所以以上正则存储了USA/California/San_Diego在“原子”中,为了解决我们的问题,我们需要三个“原子”,他们可以用左斜杠“/”进行分隔,所以正则表达式成了: (.