代码说

code is poetry

代码说    
碎碎念:越是艰难困苦的时候,越能锻炼一个人的心智,也越能体现一个人的能力。  换一换

apache下的url rewrite技术详解

作者:coderzheng 发布于:2014-3-27 19:37 Thursday 分类:apache  阅读模式

  1. 什么叫"伪静态页面"
  2. 让apache支持mod_rewrite
  3. 开启rewrite引擎
  4. URL重写规则
  5. 总结"伪静态"的条件
  6. 创建.htaccess文件的方法
1: 什么叫"伪静态页面"
     简单说就是用户访问动态文件时, 浏览器实际显示给用户的是静态url.
     用户在浏览器上输入一个url, 假设为:http://www.rbyoung.com/instances/index.html, 浏览器返回给页面相
     应的内容。按照通常的情况, 可以这样解释这个过程: 首先www.rbyoung.com所在的主机空间上有一个instances
     文件夹, 该文件夹下有一个index.html页面, 用户访问该url时会通过域名解析等过程自动定位到这个index.html
     文件, 然后apache服务器解析这个文件的内容返回给客户端.
     但是如果http://www.rbyoung.com/instances/index.html这个网址是通过伪静态来实现的, 情况将会有什么不同呢?
     这里我们先假设我们是伪静态php页面(还有伪静态asp, jsp, aspx等)
     那么实际的情况可能就是这样:在instances文件夹下并没有index.html文件, 而是有一个index.php页面,
     当用户访问含有index.html的url时, apache会根据rewrite规则将index.html定向为index.php, 就是将index.php运行后
     的内容返回给客户端, 但是同时在浏览器端并不改变url的呈现方式。这样, 就会让用户不知道他实际是在访问一
     个动态页面。 这种方式就叫做"伪静态"页面。


2:让apache支持mod_rewrite
     在LAMP体系中, 实现伪静态的方式是通过让apache支持mod_rewrite.so模块来实现的。
     这个模块的功能就是支持url重写。注意,支持mod_rewrite是"伪静态"的必要而非充分条件.
     在phpinfo页面上查找mod_rewrite, 如果它存在于"Loaded Modules"单元格右边的单元格中, 说明apache启用
     了mod_rewrite模块, 无需对apache重新进行配置, 否则就要打开httpd.conf页面(这个页面在apache文件夹下
     的conf子文件夹中), 修改这个文件并重启apache.方法如下:
     a: 打开httpd.conf文件, 查找"rewrite_module", 将该行前面的#去掉,保存文件;
     b: 重启apache, 再次访问phpinfo页面, 查找mod_rewrite, 查找到的话, 说明配置成功.

3: 开启rewrite引擎
     开启mod_rewrite功能后, 并不表示apache就能实现对页面的"伪静态"了, 因为伪静态是伴随着对url的rewrite(重写)
     同时进行的, 这个重写又需要两个条件:
     第一:开启重写引擎;
     第二:设置重写规则(Rewrite Rule)
     二者缺一不可,开启重写引擎又有两种方式:
          一、在httpd.conf文件中修改相关配置(默认配置是关闭的)
                    方法为:
                    将httpd.conf文件中的
                         <Directory />
                              Options FollowSymLinks
                              AllowOverride None
                         </Directory>
                    修改为:
                         <Directory />
                              Options FollowSymLinks
                              AllowOverride All
                         </Directory>
          二、在.htaccess文件中临时开启
                    方法为:
                    RewriteEngine on
     这两种方式的区别与联系如下:
               (1)区别:在httpd.conf文件中修改配置可以让apache管理的所有站点都自动开启重写引擎, 而在.htaccess文件中临时
                    开启的话,就只能作用在当前文件夹及其所有子文件夹下, 不能作用在上层文件夹和其他文件夹下;
               (2)联系:都能开启重写引擎

    
4: URL重写规则
     RewriteEngine on #rewriteengine为重写引擎开关on为开启off为关闭
     RewriteRule ([0-9]{1,})$ index.php?id=$1
     我讲解一下RewriteRule:RewriteRule是重写规则,支持正则表达式的,上面的([0-9]{1,})是指由数字组成的,$是结束标志,说明是以数字结束!
     好吧,现在我们可以实现伪静态页面了,写规则:
     RewriteEngine on
     RewriteRule ([a-zA-Z]{1,})-([0-9]{1,}).html$ index.php?action=$1&id=$2
     ([a-zA-Z]{1,})-([0-9]{1,}).html$是规则,index.php?action=$1&id=$2是要替换的格式,$1代表第一个括号匹配的值,$2代表第二个,如此类推!!

5: 总结"伪静态"的条件
   令 A = "让Apache支持mod_rewrite“
        ^A = "让Apache不支持mod_rewrite"
       B = "在httpd.conf中修改AllowOverride None 为 AllowOverride All”
        ^B = "保持httpd.conf中AllowOverride None的默认配置"
        C = "在.htaccess文件中设置 RewriteEngine on"
        ^C = "在.htaccess文件中设置 RewriteEngine off"
        *C = "在.htaccess文件中不对RewriteEngine进行设置"
     则:
       ^A && * : 不支持伪静态
       A && B && C: 支持
       A && B && *C: 支持
       A && B && ^C: 不支持
       A && ^B && C: 支持
       A && ^B && ^C: 不支持
       A && ^B && *C: 不支持

6: 创建.htaccess文件的方法
     (1)用记事本 打开,点击文件–另存为,在文件名窗口输入”.htaccess”,注意是整个绿色部分,也就是包含英文引号,然后点击保存就行了。
     (2)进入cmd命令 窗口,通过cd切换当刚建立htaccess.txt文件的文件夹,然后输入命令:rename htaccess.txt .htaccess ,然后点击键盘Enter键即可。
     (3)通过ftp连接htaccess.txt所在文件夹,通过ftp软件重命名。

标签: url重定向

你可以发表评论、引用到你的网站或博客,或通过RSS 2.0订阅这个博客的所有文章。
上一篇: 表单提交之后地址栏中的参数自动进行转码  |  下一篇:form表单中input元素两个属性的区别