zoukankan      html  css  js  c++  java
  • 重定向和伪静态的原理、语法、实践

    什么是伪静态:
      伪静态是相对真实静态来讲的,伪静态只是改变了URL的表现形式,实际上还是一个动态页面。使伪静态有了真静态一样的SEO。

      真实静态的开销主要是磁盘IO,伪静态增大了CPU的开销。
      伪静态的应用场景:IO称为瓶颈
    什么是重定向:
      通过各种方法将各种网络请求重新定个方向转到其他位置(分为内部和外部)
      HTTP标准协议中的3XX(主要用302,302)

    用重定向技术来实现伪静态:

    实现方法:
    1.通过.htaccess文件配置
      在每一个目录下,影响所有的子目录。
      开启后访问页面,要查找所有上级目录中的.htaccess文件,会产生性能问题。
      可以被主配置文件代替。
      apache语法配置:
      修改目录权限:AllowOverride All
      

    #vim .htaccess
      RewriteEngine On
      RewriteRule ^(.*).htm$ $1.html #$1 是括号中匹配的规则

      Windows下创建 .htaccess的方法:cmd下执行 echo “1” > .htaccess
    2.通过Apache的主配置文件<Directory>字段

    #vim /etc/http/conf/httpd.conf
    <Directory>
    AllowOverride None
    RewrireEngine On
    RewriteRule ^(.*).htm$ $1.html
    <Directory>

    3.使用PHP或者其他脚本语言(只能实现外部重定向)
    PHP 配置方法:

    <?php
    header("Location:test.html");
    ?>

    Apache重定向原理
      http://httpd.apache.org/docs/2.4/images/rewrite_process_uri.png

    mod_rewrite模块
      是Apache的URL操作模块
      包含 RewriteBase:指定路径,RewriteRule:指定规则,RewriteCond:条件判断,RewriteMap
      两种配置方式

        1.服务器级别(配置文件)

        2..htaccess文件

      rewrite日志功能
        Apache2.2版本 设置LogLevel alert rewrite:trace8 (1-8),生产模式不要大于2

    #vim
    /etc/http/conf/httpd.conf
    <Directory>
    AllowOverride None
    RewrireEngine On
    RewriteRule ^(.*).htm$ $1.html
    LogLevel alert rewrite:trace2
    <Directory>

      Apache2.4以上版本 LogLevel,日志文件只能在配置文件中配置。

    RewriteRule语法说明
      1.模式匹配支持Perl格式的正则表达式、和rewrite的变量
      2.替换的URL支持模式匹配的结果和rewrite变量
      3.多个flag用逗号隔开[R=302,C]

    RewriteRule R flag
    使用说明:强制外部重定向,后面可以加301或302跳转,不加默认为302

    RewrireEngine On
    RewriteRule ^(.*).htm$ /$1.html [R=301]

    RewriteRule C flag
    使用说明:链接下一条规则,与下一条规则称为一个整体,如果这一条规则不匹配,下一条就不进入了

    RewrireEngine On
    RewriteRule ^(.*).htm /$1.html [C]
    RewriteRule ^(.*).html$ /$1.php

    RewriteRule L flag
    使用说明:结束规则,立即停止重写操作,并不再应用其他重写规则

    RewrireEngine On
    RewriteRule ^(.*) first.php?req=$1 [L]
    RewriteRule ^(.*) second.php$?req=$1

    RewriteRule NE flag
    使用说明:不对URL中的特殊字符进行hexcode转码

    RewrireEngine On
    RewriteRule ^(.*).htm$ /index.html#$1 [R,NE]

    RewriteRule NC flag
    使用说明:不区分大小写

    RewrireEngine On
    RewriteRule ^test/(.*).htm$ /src/$1.html [NC]

    RewriteRule G flag
    使用说明:请求网页失效(Gone)Apache返回410

    RewrireEngine On
    RewriteRule ^test/(.*)$ [G]

    RewriteRule QSA flag
    使用说明:用于在URL中截取查询字符串

    RewrireEngine On
    RewriteRule ^test/(.*)$ /per.php?person_id=$1 [QSA,R]

    http://test/index.php?name=ming

    RewriteBase语法说明
    设置了目录级重写的基准URL
    RewriteBase URL-path

    RewrireEngine On
    RewriteBase /
    RewriteRule ^(.*).htm /$1.html [R] 

      #如果指定了外部重定向,不加RewriteBase /会出错,外部重定向会从根目录下找,但是没有权限
      #如过没有使用[R]标签,是内部重定向,Apache有权限访问目录,不加RewriteBase /也可以
    RewriteCond 语法说明
    使用说明:RewriteCond指令定义了一个规则的条件,即在一个RewriteRule指令之前由一个或多个RewriteCond指令
    $1-9 引用紧跟在RewriteCond后面的RewriteRule中的模板中匹配的数据

    RewrireEngine On
    RewriteCond $1 "test"
    RewriteRule ^(.*).htm$ $1.html
    # 输入test.htm 才会进行匹配


    服务器变量引用

    RewrireEngine On
    RewriteCond %{HTTP_HOST} "127.0.0.1"
    RewriteRule ^(.*).htm$ http://locahost/$1.html [R]
    # 访问者使用127.0.0.1访问时,定向到localhost,可以用在当客户使用IP地址访问时,自动跳转到域名

    %1-9 RewriteCond条件中最后符合条件中的分组成分

    RewrireEngine On
    RewriteCond %{HTTP_HOST} "127.0.0.(.*)"
    RewriteCond %1 "1"
    RewriteRule ^(.*).htm$ http://locahost/$1.html [R]
    # 只有访问的是127.0.0.1才会进行匹配

    -d 是否是目录
    -f 是否是文件
    -F 文件存在并且可以访问
    [NC] 大小写不敏感
    [OR]条件判断的或,不加默认是and

    RewrireEngine On
    RewriteCond /test/www -d [OR]
    RewriteCond /test/abc -d
    RewriteRule ^(.*).htm $1.html

    RewriteMap MapName MapType:MapSource
    MapName: 命名给RewriteRule调用
    MapType:文件类型有txt、rnd
    MapSource:map文件路径。
    不能在.htaccess中配置,配置在主配置文件中
    语法说明
    txt格式 ${MapName:Lookup | FefaultValue}

    #vi /etc/http/conf/httpd.conf
    RewriteMap pages txt:/etc/http/conf/map.txt
    #vi /etc/http/conf/map.txt
    test1 pagetest1
    test2 pagetest2
    #vi .htaccess
    RewrireEngine On
    RewriteRule ^(.*).htm ${pages:$1}

    rnd格式:随机映射 RewriteMap servers rnd:/etc/http/conf/rnd.txt

    #vi /etc/http/conf/httpd.conf
    RewriteMap dirs txt:/etc/http/conf/dirs.txt
    #vi /etc/http/conf/dirs.txt
    URL1 s1|s2|s3
    URL2 w1|w2|w3
    #vi .htaccess
    RewrireEngine On
    RewriteRule ^(.*).htm ${dirs:$1|root}/$1.php # 匹配不成功访问root下.php


    Rewrite正则表达式:
      .   匹配任意字符
      +   重复匹配1个到多个
      *   匹配0到多个
      ^   匹配字符串开始位置
      $   匹配字符串结束位置
      ?   前一个匹配是可选的
      [abc]   匹配其中一个字母
      [^abc]   不匹配方括号中的内容
      test1|test2   匹配test1或est2
    扩起来的表达式按次序,后面的匹配后的处理中可以用$1-$n来访问

    临时重定向和永久重定向
    区别和作用(面向搜索引擎机器人)
      不是顶级目录的A页面做301定向到其他目录B,则可以正常收录B页面
      而顶级目录的A页面做302定向到其他目录B,则收录的A页面

    基于重定向的文件访问控制
    防盗链:

    #vi .htaccess
    RewriteEngine on
    RewriteCond %{HTTP_REFERER} !^$ #排除直接访问没有目标源的情况
    RewriteCond %{HTTP_REFERER} !localhost [NC] #限定只能通过localhost访问
    RewriteRule .(gif|jpg|png)$ - [F,NC] # 非localhost访问直接禁止

    限定访者的IP列表

    #vim /etc/httpd/conf/httpd.conf
    RewriteMap host-deny txt:/etc/httpd/conf.d/host.deny
    #vim  /etc/httpd/conf.d/host.deny
    192.168.1.100 deny
    #vim .htaccess
    RewriteEngine on
    RewriteCond %{host-deny:%{REMOTE_ADDR}|NOTFOUND} deny
    RewriteRule ^ - [F]

    通过重定向限制迅雷
    先通过代码分析出迅雷的特征

    RewriteEngine on
    RewriteCond %{HTTP_USER_AGENT} 2.0.50727 [NC,OR]
    RewriteCond %{HTTP_USER_AGENT} ^BlackWido [NC]
    RewriteRule . abuse.txt
    
    #vim abuse.txt
    禁止访问

    其他web服务器重定向配置
    Nginx伪静态配置
    防盗链示例

    location ~*.(gif|jpg|png|swf|flv)${
    root html
    valid_referers none blocked *.nginx.cn;
    if ($invalid_referer){
    rewrite ^/ www.nginx.cn
    #return 404;
    }
    }


  • 相关阅读:
    Mac电脑Tomcat下载及安装(详细)
    PhantomJS 一个隐形的浏览器
    expected_conditions 库的使用方法
    selenium新的定位方法,更简洁很方便
    一写貌似有用的学习网站
    selenium定位方式源码的存放位置
    給查詢出來的列 命名一個名字的方法
    小程式测试 笔记
    nginx ssi 配置小细节(一)
    HTML页面上获取鼠标的位置(备忘)
  • 原文地址:https://www.cnblogs.com/gaoyuanzhi/p/8298824.html
Copyright © 2011-2022 走看看