大流量程序设计与实现--系列五

一、伪静态----正则规范:

    $reg = '/^host=([\d.]+)/ix';

    正则特殊说明: 环视基础,自行百度/google

        (?:pattern) 非捕获匹配

        (?!pattern)

        (?<!pattern)

        (?=pattern)

        (?!=pattern)

    输入的url是:

    http://www.1366768.com/blog.php/1,2,332,12.html

    但是后台处理时当成

    http://www.1366768.com/blog.php/a=1&b=2&c=332&d=12.html

    $path_info = $_SERVER['PATH_INFO'];

    //正则规则,要用单引号,不要用双引号。

    $reg = '/(\d+)\,(\d+),(\d+)\.html/i';

    preg_match($reg, $path_info, $match);

    echo "<pre>";

    print_r($match);

    实例1.

    <?php 

    $str = "asdfasd按规定sadfasdf2324kj23kk23撒地方可33";

    //查询出有多少汉字、英文字母、数字

    /*utf-8  16进制 

      汉字范围是:\x4e00-\x9fa5

    */

    //例一=================================================

    $str = "asdfasd按规定sadfasdf2324kj23kk23撒地方可33";

    //查询出有多少汉字、英文字母、数字

    $reg = '/[\x{4e00}-\x{9fa5}]/iu';

    preg_match_all($reg, $str, $match);

    echo "<pre>";

    print_r($match);

    echo '汉字有:'.count($match[0]).'';

    $reg = '/[A-Z]/i';

    preg_match_all($reg, $str, $match);

    echo "<pre>";

    print_r($match);

    echo '字母有:'.count($match[0]).'';

    //例二=================================================

    //要求取出xxx-yyy-zzz这样的模式的,第二个匹配的zzz

    $str = "333-444-777djfadsfasfd222-333-666|asdfasdf222";

    $reg = '/([\d])\1{2}-([\d])\2{2}-([\d])\3{2}/iu';

    preg_match_all($reg, $str, $match);

    echo "<pre>";

    print_r($match);

    $str = $match[0][1];

    $reg = '/([\d])\1{2}/iu';

    preg_match_all($reg, $str, $match);

    print_r($match);

    echo $match[0][2];

    exit;

二、伪静态----rewrite(实际应用中,这个用得更多,任然是正则为基础)

    http://www.1366768.com/site/index.html?pid=1

    变成

    http://www.1366768.com/site/index/pid/1.html

    伪静态应用----防盗链:

    1.  在一个项目中有两个文件夹,publicprivate

        public 任何人都可访问 、private自己访问

        在private的目录里面新建一个.htaccess文件,对于private只让127.0.0.1可以访问。

        1.1 .htaccess (apache服务器这样的话就禁止所有的请求

            order deny,allow

            deny from all

            allow from 127.0.0.1

        但是同一个apache里面的多台虚礼主机,其它的就可以访问,这个private里面的内容。

        使用正则规范来做:

        1.2 .htaccess写:这个可以让特定的url来访问。

            RewriteEngine On

            #这句话相当于是if,下面的是iftrue时,要执行的语句

            RewriteCond %{HTTP_REFERER} !www.yourwanturl.com

            #这里就可以增加条件(如果不是你允许的网址,且不是文件,就执行下面的)

            RewriteCond %{REQUEST_FILENAME} !-f 

            #如果没有上面的cond,那么下面的意思就是:如果请求的是一个jpg,就forbidden

            RewriteRule .*\.jpg -[F]

            RewriteRule .*\.gif -[F]

            RewriteRule .*\.js -[F]

            RewriteRule .*\.css -[F] #这里就可以增加条件

    1.1 php模拟一个http请求,Referer:www.yourwanturl.com,就可以取到img,需要再次改进

    2.  外网来的http请求,会在请求头带上referer:发送请求的url

    3.  访问a.php然后里面有a.png,b.png会发出3http请求。

    4.  ie浏览器,如果404.html文件的大小,小于512B,就提示找不到改网页。

    5.  文件大小和占用空间不一样,文件系统格式不同,以最少(4KB)来分配给一个文件

    6.  如果在<Directiory>节点配置了Options Index,同时又启用了rewriteEngine On

        那么访问任何一个页面,将会看到403禁用提示。因为父级目录本身配置好了,

        所以,要么不配置,要么配置一模一样。

        针对apache,不过现在我都用nginx。。。只是说明这个问题,两者很多都是相通的

        <VirtualHost *:80>

            <DocumentRoot "/www/your.com">

            ServerName www.your.com

            <Directory "/www/your.com">

                #options indexes

                #allowoverride all 表示到对应的目录的.htaccess去匹配规则

                allowoverride all

            </Directory>

        </VirtualHost>

7.  RewriteRule abc.html index.phpabc.html存在,就访问abc.html否则访问index.php

#如果不是一个文件就放回true,然后执行下面语句

        RewriteCond %{REQUEST_FILENAME} !-f  

        RewriteRule abc.html index.php

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值