zoukankan      html  css  js  c++  java
  • apache 配置.htaccess实现伪静态 url重写

    文章转载自:

    https://www.cnblogs.com/-beyond/p/8325144.html

    https://blog.csdn.net/expleeve/article/details/6621885/

           图-1:重写规则集中的控制流

    使用apache伪静态需要修改apache配置文件,开启Rewrite重写模块

    #开启重写引擎
    RewriteEngine On

    1.RewriteRule 根据匹配规则,重写url

    RewriteRule语法说明:

    RewriteRule  模式匹配  替换的URL  [flags]

       内部重定向

    #开启重写引擎
    RewriteEngine On
    #内部重定向
    #RewriteRule ^(.*).htm$ $1.

     使用内部重定向浏览器地址不会发生变化

    外部重定向

    #开启重写引擎
    RewriteEngine On
    #R参数-外部重定向 301永久重定向,对搜索引擎友好,302临时重定向
    RewriteRule ^(.*).hta$ $1.html [R=301]

     

     外部重定向利用http协议告诉浏览器进行跳转,这里有个问题就是路径加载错误

    RewriteRule ^(.*).hta$ /$1.html [R=301]
    这里需要在重写后的地址前面加“/”,另外一种方式是设置RewriteBase url重写基准目录

    RewriteRule C flag

    C表示链接下一规则,如果在一条规则后面加了该flag后,这条规则就和下一条规则成为一个整体,如果这一条规则不匹配,那么下一条也不进行匹配,类似于“拉着别人下水的”的情景。

    注意这里的匹配的时候,前一条的匹配之后,URL改变了,然后,将新的URL进行下一条规则的匹配,类似逻辑判断与运算。

    #开启重写引擎
    RewriteEngine On
    RewriteBase /
    RewriteRule ^(.*).htm$ $1.htas [C]
    RewriteRule ^(.*).hta$ $1.ht [C]
    RewriteRule ^(.*).ht$ $1.php [R=301]

    RewriteRule L flag说明

    如果一条规则的后面添加了这个L flag,那么如果这条规则匹配,就不在进行下一条规则的匹配,如果改规则不匹配,则会继续进行下一规则的匹配。

    实例:

      根目录下有index.html,index.php,访问index.htm,因为匹配到了第一条规则,并且后面有L flag,所以不会匹配下面一条,类似编程逻辑或运算。

    RewriteRule NE flag 说明

    不对URL中的字符进行hexcode转码

    RewriteRule ^(.*).htm$ $1.hta#index [R]

     外部重定向,#会被转义

     添加NE标签,浏览器地址显示正常

    #NE标签
    RewriteRule ^(.*).htm$ $1.hta#index [R,NE]

     RewriteRule NC flag说明

    NC是指在匹配时,不区分大小写。因为在Apache本身对大小写是敏感的,

    #NC标签
    RewriteRule ^(.*).htm$ $1.hta#index [R,NE,NC]

     RewriteRule G flag说明

    表示请求的网页已经失效(对应响应码的410),并且停止后续规则的匹配

    #G标签
    RewriteRule ^(.*).htm$ $1.hta#index [R,NE,NC,G]

     RewriteRule QSA flag说明

    用于在URL中截取查询字段,也就是保留用URL传递的参数,因为默认是会将参数截取掉的

    规则不加QSA标签 http://r.com/aa.htm?a=b&b=c 
    #QSA标签
    RewriteRule ^(.*).htm$ $1.hta#index [R,NE,NC,QSA]

    Rewritecond-变量的使用
    RewriteCond %{HTTP_REFERER} (www.test.cn)
    RewriteRule (.*)$ test.php
    #上面语句的作用是如果你访问的上一个页面的主机地址是www.test.cn,则无论你当前访问的是哪个页面,都会跳转到对test.php的访问。

    RewriteCond %{REMOTE_HOST} ^test1.* [OR]
    RewriteCond %{REMOTE_HOST} ^test2.* [OR]
    RewriteCond %{REMOTE_HOST} ^test3.*
    RewriteRule (.*)$ test.php
    #上面语句的作用是如果你的地址是test1或test2或test3的时候,则就跳到对test.php。从这里可以看出,RewriteCond语句之间默认的是AND,如果想要OR,则要明确的写出来。

    Rewritecond-变量的使用



    rewritecond-其他常用的判断条件
    RewriteCond %{REQUEST_FILENAME} !-f //如果文件存在,就直接访问文件,不进行下面的RewriteRule.(不是文件或文件不存在就执行重写)

    RewriteCond %{REQUEST_FILENAME} !-d //#如果目录存在就直接访问目录不进行RewriteRule

    RewriteCond %{REQUEST_URI} !^.*(.css|.js|.gif|.png|.jpg|.jpeg)$ //#如果是这些后缀的文件,就直接访问文件,不进行Rewrite



  • 相关阅读:
    JS小记
    chrome 插件开发
    js闭包理解
    文件名后缀详解
    Glut 回调函数小结
    vc++ 6.0下Glut的配置 及 Glut 框架介绍
    数字图像点运算实践 (直方图均衡和分段线性拉伸)
    event.keycode值大全
    Bookmarklet
    牛人经典语录
  • 原文地址:https://www.cnblogs.com/xiangdongsheng/p/14051452.html
Copyright © 2011-2022 走看看