欢迎来到天天文库
浏览记录
ID:18793793
大小:46.50 KB
页数:17页
时间:2018-09-24
《phpmod_rewrite重写模块技术》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、PHPmod_rewrite重写模块技术Apache以其极高的性价比让越来越多的公司组织选择它作为服务器。其中它有一个很有用的功能就是mod_rewrite模块,一个可将用户请求的URI根据特定规则转换的模块。这篇文章将引领你学习rewrite规则,正则表达,rewrite条件,以及提供了一系列的例子。首先,我假设你已经懂得URI重写对你网站的意义为前提,如果对这一方面你想了解得更多,这里我向你推荐mod_rewrite:ABeginner’sGuidetoURLRewriting这本书。你可以从书中找到关于这方面得更多信息。测试服务器安装一些服务器没有开启mod_rewrite模
2、块(服务器默认关闭),你可以键入一行PHP代码来确定你的服务器是否已经开启mod_rewrite模块:phpinfo();在浏览器运行这段代码,找到ApacheModulessection,如果mod_rewrite没有出现在其列表中,那么你就需要通知你的服务商开启mod_rewrite服务,或者..换另外一个好的服务商。大多数服务商都会开启mod_rewrite模块,所以你很容易找到。mod_rewrite的魔力简单举例:创建三个文件,分别命名为test.html,test.php和.htaccesstest.html输入:
3、est.php输入:
4、est.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会根据一定的格式转化成这样,为了
5、让display.php明白查询的字符,所以我们将用到正则表达式告诉mod_rewrite匹配我们的URLs。如果你对正则表达式不太熟悉,许多网站提供了优秀的教程供你学习。在本文的末尾,我也会列举出比较好的参考网址。如果你还是不能明白我所讲述的,那么我建议你看看后面链接中的前两篇。一个最常用的正则就是(.*)。它含有两个元素:一是“点”,表示任意字符;二是“星”,表示以前的全部字符。所以(.*)会匹配{REQUEST_URI}的所有字符。{REQUEST_URI}是URL中出去域名以及“?”符号的所有查询字符,也是Apache重写技术尝试匹配的字符。包裹在正则表达式中的元素存放在“
6、原子”内,它是在规则范围内允许被匹配的变量,所以以上正则存储了USA/California/San_Diego在“原子”中,为了解决我们的问题,我们需要三个“原子”,他们可以用左斜杠“/”进行分隔,所以正则表达式成了:(.*)/(.*)/(.*)以上正则,在{REQUEST_URI}中通过两个“/”的分割存储了三个值,为了解决我们具体问题,我们得加一点限制――毕竟,第一个和最后一个原子可以匹配任何字符。开始,我们可以添加一些特殊的字符,比如表示正则“开始”或者“结束”,“^”字符表示正则的开始而“$”表示正则的结束。^(.*)/(.*)/(.*)$这个正则表示整个字符串将全部匹配,
7、除去之前后者之后,没有任何例外。但是,这个方法仍然匹配的范围太广,我们将匹配的字符按照原子形式存放,然后通过他们形成查询字符串,所以我们必须信任我们所匹配的字符。用(.*)匹配字符串,由于允许了太多字符,所以会存在潜在的安全隐患,引用不当会使mod_rewrite运行出故障。为了避免一些不必要的麻烦,让我们更改一下我们的原子正则,让其更加准确的匹配我们允许的字符。因为这些原子代表了地区地名,所以我们完全可以用A到Z的大小写来表示他们,另外因为地名之间有空格,所以下划线
此文档下载收益归作者所有