• 技术文章 >后端开发 >php教程

    AVS30 程序分析1

    2016-08-08 09:21:00原创1031
    一、关于Rewrite的分析

    AVS默认推荐使用Apache环境运行,因为程序中自带.htaccess文件,内容如下:

    #如果服务器报500错误注释这2行
    Options -Indexes
    Options +FollowSymLinks
    
    #反注释下面几行,如果你想使用图片缓存
    #
    #  ExpiresActive On
    #  ExpiresDefault A1209600
    #  ExpiresByType text/html A1
    #
    
    # Uncomment following lines if Apache doesnt support MultiViews!
    
        RewriteEngine On
    
            # Uncomment the 2 lines below if you are using www.domain.com
            # as the baseurl for the site and users access your site
            # via domain.com (THIS IS REQUIRED FOR JQUERY TO WORK)
            #如果访问的不带www的域名则跳转到带www的域名
            #e.g.: baidu.com => www.baidu.com
            RewriteCond %{HTTP_HOST} ^domain.com [NC]
            RewriteRule ^(.*)$ http://www.domain.com/$1 [L,R=301]
    
        RewriteCond %{REQUEST_FILENAME} !-f  #如果请求的不是文件
        RewriteCond %{REQUEST_FILENAME} !-d  #如果请求的不是目录
        RewriteRule .* loader.php [L,QSA]    #重写到loader.php处理请求
    
    
    

    对应的Nginx规则:

    	location / 
    	{
    		#-f 判断是否文件
    		#-d 判断是否目录
    		#-e 判断是否文件或目录
    		if (!-e $request_filename){
    			rewrite ^(.*)$ /loader.php last;
    		}
    	}
    其中,last最为关键,之前调试的时候设为break,怎么都不行,百斯不得骑姐:)后来百度才明白这二者的区别

    如果配置中存在N多个location,last匹配后还会继续循环匹配,而break则立即终止匹配。

    参考文章:Nginx Rewrite研究笔记 nginx中的break与last指令区别

     1,
        'album' => 1,
        'albums' => 1,
        'blog' => 1,
        'blogs' => 1,
        'captcha' => 1,
        'categories' => 1,
        'community' => 1,
        'confirm' => 1,
        'error' => 1,
        'feedback' => 1,
        'feeds' => 1,
        'game' => 1,
        'games' => 1,
        'index' => 1,
        'invite' => 1,
        'loader' => 1,
        'login' => 1,
        'logout' => 1,
        'lost' => 1,
        'mail' => 1,
        'notice' => 1,
        'notices' => 1,
        'photo' => 1,
        'requests' => 1,
        'search' => 1,
        'signup' => 1,
        'static' => 1,
        'stream' => 1,
        'upload' => 1,
        'user' => 1,
        'users' => 1,
        'video' => 1,
        'videos' => 1,
        'edit' => 1
    );
    $query      = ( isset($_SERVER['QUERY_STRING']) ) ? $_SERVER['QUERY_STRING'] : NULL;
    $request    = str_replace($relative, '', $_SERVER['REQUEST_URI']);
    $request    = str_replace('?' .$query, '', $request);
    $request    = explode('/', trim($request, '/'));
    if (isset($request['0'])) {
        $page   = $request['0'];
        if (isset($loaders[$page])) {
            require $page. '.php';
        } else {
    		header('HTTP/1.0 404 Not Found');
      		die();
    	}
    } else {
    	header('HTTP/1.0 404 Not Found');
        die();
    }
    

    这段代码就是检测/xxx允许访问的页面,然后访问对应的.php

    eg: http://www.xxx.com/video实际上访问的是/video.php


    版权声明:本文为博主原创文章,未经博主允许不得转载。

    以上就介绍了AVS30 程序分析1,包括了方面的内容,希望对PHP教程有兴趣的朋友有所帮助。

    声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn核实处理。
    专题推荐:39 160 gt REQUEST com
    上一篇:使用PHP把下划线分隔命名的字符串 转换成驼峰式命名方式 , 把下划线后面的第一个字母变成大写 下一篇:自己动手写 PHP MVC 框架(40节精讲/巨细/新人进阶必看)

    相关文章推荐

    • PHP网站常见一些安全漏洞及防御方法• PHP Hyperf 3.0 发布!新功能速览• 详解PHP怎么实现旋转图片验证• 简单理解PHP超级全局变量• 一起聊聊PHP的路由与伪静态应用
    1/1

    PHP中文网