apache的rewrite.doc

  1. 1、本文档共18页,可阅读全部内容。
  2. 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
apache的rewrite

apache的rewrite 学习 Apache mod_rewrite 13 例 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 输入: h1This is the HTML file./h1 test.php输入: h1This is the php file./h1 .htaccess输入: RewriteEngine on RewriteRule ^/?test\.html$ test.php [L] 将以上三个文件放test测试文件夹下,在浏览器录入: /test/test.html 在浏览器中将 替换成你自己的域名。如果运行结果显示“This is the PHP file”,那么运行成功,如果结果显示“This is the Html file”,那么肯定是哪里出了问题,请你再仔细检查下。 如果你测试成功,你是否发现了我们录入了test.html的文件名,确执行了test.php文件,是的,你已经初识了mod_rewrite的神奇。 mod_rewrite 正则表达式 现在我们可以重写URLs了!设想我们有一个显示城市信息的网站。根据URI选择城市:/display.php?country=USA state=Californiacity=San_Diego 这个URL太长并且对用户也不友好,我们更希望写成这样: /USA/California/San_Diego 我们需要告诉Apache新的URL会根据一定的格式转化成这样,为了让display.php明白查询的字符,所以我们将用到正则表达式告诉mod_rewrite匹配我们的URLs。如果你对正则表达式不太熟悉,许多网站提供了优秀的教程供你学习。在本文的末尾,我也会列举出比较好的参考网址。如果你还是不能明白我所讲述的,那么我建议你看看后面链接中的前两篇。 一个最常用的正则就是(.*)。它含有两个元素:一是“点”,表示任意字符;二是“星”,表示以前的全部字符。所以(.*)会匹配{REQUEST_URI}的所有字符。{REQUEST_URI}是URL中出去域名以及“?”符号的所有查询字符,也是Apache 重写技术尝试匹配的字符。 包裹在正则表达式中的元素存放在“原子”内,它是在规则范围内允许被匹配的变量,所以以上正则存储了USA/California/San_Diego在“原子”中,为了解决我们的问题,我们需要三个“原子”,他们可以用左斜杠“/”进行分隔,所以正则表达式成了: (.*)/(.*)/(.*) 以上正则,在{REQUEST_URI}中通过两个“/”的分割存储了三个值,为了解决我们具体问题,我们得加一点限制――毕竟,第一个和最后一个原子可以匹配任何字符。 开始,我们可以添加一些特殊的字符,比如表示正则“开始”或者“结束”,“^”字符表示正则的开始而“$”表示正则的结束。 ^(.*)/(.*)/(.*)$ 这个正则表示整个字符串将全部匹配,除去之前后者之后,没有任何例外。 但是,这个方法仍然匹配的范围太广,我们将匹配的字符按照原子形式存放,然后通过他们形成查询字符串,所以我们必须信任我们所匹配的字符。用(.*)匹配字符串,由于允许了太多字符,所以会存在潜在的安全隐患,引用不当会使mod_rewrite运行出故障。 为了避免一些不必要的麻烦,让我们更改一下我们的原子正则,让其更加准确的匹配我们允许的字符。因为这些原子代表了地区地名,所以我们完全可以用A到Z的大小写来表示他们,另外因为地名之间有空格,所以

文档评论(0)

cbf96793 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档