服务器脚本以php为例
 
 
一、伪静态是个啥?
 
1、说起伪静态基本上搞web开发的人,多多少少都有了解与使用,有人会说什么时候会使用伪静态?使用原生的url地址不是蛮好的吗,确实是这样的,其实我蛮喜欢原生的url风格的,但是由于某些原因我不得不使用伪静态。
比如:
(1), url地址比较友好,看着爽,更有说服务力
(2), 如果是一个内容站,有利于seo优化
(3), 有效的防止sql注入,让别人不知道你真实的url地址
(4), 比如你在公司上班,你的领导,可能就会让你设置伪静态,工作需要。
 
2、那说了好处,有没有坏处呢? 坏处肯定是有的,与原生的url比较在性能上,不如原生的url,简单的说伪静态就是在服务器上又进行了一层url解析,消耗服务器资源。当然了这点消耗与优点相比,我们还是可以接受的。
 
3、那伪静态长什么样呢?
比如:
http://www.xxab.com/hello/world.html
http://www.xxx.com/content/23223.html
http://www.xxx.com/content/go/cb
以上这样的url地址,我们就可以叫伪静态url(都是进行过url处理)
 
4、那原生的url地址是什么样呢?
比如:
http://www.xxx.com/index.php?name=will&age=20
http://www.xxx.com/content/list.php?id=3
以上这样的url地址,就是原生url
 
 
 
二、nginx怎么设置伪静态呢?
 
如果你之前使用过apache的话很简单的,只要apache有rewrite模块就可以了,然后就可以自己编写rewrite规则了。
但是nginx如果你不明白原理就麻烦了,但只要明白原理就简单的,下面的案例都是我本地开发环境的配置,如果讲的不太合适的地方,请见谅。
 
 
1,nginx配置:
server {
        listen       80;
        server_name  localhost;
        access_log  logs/localhost.access.log  main;
        #开启伪静态日志,方便调试
        rewrite_log on;
        #输出错误日志,错误级别设置为notice
        error_log logs/error-test.log notice;
 
 
        root html/test;
        index  index.php index.html;
        location / {
                try_files $uri $uri/ @aaaaab;
        }
 
        //注意使用@符号,不然不成功
        location @aaaaab {
                include D:/nginx/html/test/.htaccess;
        }
 
        location ~ \.php$ {
                fastcgi_pass 127.0.0.1:9000;
                fastcgi_index index.php;
                fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
                 include fastcgi_params;
        }
}
 
 
2, .htaccess清单
 
rewrite 语法格式:
rewrite   [regex]                  [replacement]      [flag];
               url正则表达式        替换真实url          标记(last,break)
 
实例:
rewrite   ^/article/index.html$   /index.php?process=article&a=index last;
 
//注意,这是一行,由于一行写不下,自动换行了
rewrite ^/article/list/([0-9]+)-([0-9]+)-([0-9]+).html$ 
/index.php?process=article&a=list&group_id=$1&category_id=$2&p=$3 last;
 
rewrite ^/article/detail/([0-9]+).html$   /detail.php?id=$1 last;
 
rewrite ^/group/([0-9]+).html$   /group.php?group_id=$1 last;
 
 
 
3,上面的案例虽然小,但是五脏俱全,我们开始一个一个的分析
 
try_files $uri $uri/ @aaaaab; 这句话是什么意思?
 
try_files从字面上理解就是尝试文件,再结合环境理解就是“尝试读取文件”,那他想读取什么文件呢,
答:读取静态文件
 
$uri  这个是nginx的一个变量,存放着用户访问的地址,
比如:http://www.xxx.com/index.html, 那么$uri就是 /index.html
 
$uri/ 代表访问的是一个目录,比如:http://www.xxx.com/hello/test/    ,那么$uri/就是 /hello/test/
 
完整的解释就是:try_files 去尝试到网站目录读取用户访问的文件,如果第一个变量存在,就直接返回;
不存在继续读取第二个变量,如果存在,直接返回;不存在直接跳转到第三个参数上。
 
 
比如用户访问这个网地址:http://www.xxx.com/test.html
try_files首先会判断他是文件,还是一个目录,结果发现他是文件,与第一个参数 $uri变量匹配。
然后去到网站目录下去查找test.html文件是否存在,如果存在直接读取返回。如果不存在直接跳转到第三个参数,而第三个参数是一个location,而这个location里面配置的就是rewrite规则。
 
 
说到这里大家就明白了,能看懂上面的配置了。
那有人会问了,还要try_files干什么呀,直接使用rewrite不就可以了吗?
答:不可以,因为rewrite这个指令把所有请求过来的url地址,都与htaccess文件中的正则地址进行一次匹配,这样的话,静态的url地址也进行了一次匹配,比如http://xxxx.com/aa.png,这个地址是不需要重写的,但是rewrite也进行了一次匹配,这就浪费服务器资源,影响执行效率。而我们真正需要匹配的,其实都是一些动态url地址,如果我说这么多,你还不明白的话,可以打印日志查看。
 
 
include D:/nginx/html/test/.htaccess; 这句就是去加载伪静态文件,把所有的规则写在这里面,注意这里要使用全路径,不然不成功。

nginx伪静态之try_files和rewrite讲解的更多相关文章

  1. [转]Nginx伪静态配置和常用Rewrite伪静态规则集锦

    Nginx伪静态配置和常用Rewrite伪静态规则集锦 作者: 字体:[增加 减小] 类型:转载 时间:2014-06-10 我要评论 伪静态是一种可以把文件后缀改成任何可能的一种方法,如果我想把ph ...

  2. Nginx伪静态配置和常用Rewrite伪静态规则集锦

    伪静态是一种可以把文件后缀改成任何可能的一种方法,如果我想把php文件伪静态成html文件,这种相当简单的,下面我来介绍nginx 伪静态配置方法 nginx里使用伪静态是直接在nginx.conf ...

  3. 修改Nginx 伪静态Rewrite规则 安装Chevereto

    Chevereto 是目前最为强大的 PHP 图床系统,通过它可部署多用户公开或私有的图片存储服务,现在 Chevereto 出了免费的版本,小伙伴可以围观一下. https://github.com ...

  4. php ci nginx 伪静态rewrite配置方法

    php ci nginx 伪静态rewrite配置方法 location / { if (!-e $request_filename) { rewrite ^(.*)$ /index.php?s=/$ ...

  5. nginx 伪静态

    伪静态是一种可以把文件后缀改成任何可能的一种方法,如果我想把php文件伪静态成html文件,这种相当简单的,下面来介绍nginx 伪静态配置方法有需要了解的朋友可参考 nginx只需要打开nginx. ...

  6. nginx伪静态配置教程总结

    在nginx中配置伪静态,也就是常说的url重写功能,只需在nginx.conf配置文件中写入重写规则即可. 当然,这个规则是需要熟悉正则表达式,只掌握nginx自身的正则匹配模式即可,对正则不了解的 ...

  7. nginx配置location总结及rewrite规则写法【转】

    转自 nginx配置location总结及rewrite规则写法 | Sean's Noteshttp://seanlook.com/2015/05/17/nginx-location-rewrite ...

  8. phpstudy配置php7.1.11 + phpstudy nginx伪静态

    切记要把新的php版本配到环境变量,cmd才会生效 php7.1.11下载地址 http://windows.php.net/download/ 下载之后,解压. 重名的为php-7.1.11-nts ...

  9. php配置伪静态如何将.htaccess文件转换 nginx伪静态文件

    php通常设置伪静态三种情况,.htaccess文件,nginx伪静态文件,Web.Config文件得形式,如何将三种伪静态应用到项目中呢, 1,.htaccess文件 实例 <IfModule ...

随机推荐

  1. [Big Data - Kafka] Kafka剖析(一):Kafka背景及架构介绍

    Kafka是由LinkedIn开发的一个分布式的消息系统,使用Scala编写,它以可水平扩展和高吞吐率而被广泛使用.目前越来越多的开源分布式处理系统如Cloudera.Apache Storm.Spa ...

  2. Oracle的NVL函数用法

    从两个表达式返回一个非 null 值. 语法 NVL(eExpression1, eExpression2) 参数eExpression1, eExpression2 如果 eExpression1 ...

  3. ArcGIS Runtime SDK for iOS之符号和渲染

    符号定义了图形外观的非地理方面.它包括了图形的颜色.线宽.透明度等等.ArcGIS Runtime SDK for iOS包含了许多符号类,其中的每个类可以让你以独特的方式指定符号.每个符号的类型也是 ...

  4. 【iCore1S 双核心板_ARM】例程十:SYSTICK定时器实验——定时点亮LED

    实验原理: 通过STM32的三个GPIO口驱动三色LED的三个通道,设定GPIO为推挽输出,采用 灌电流的方式与LED连接,输出高电平LED灭,输出低电平LED亮,通过系统定时器实现 1s定时,每秒变 ...

  5. 关于Python打包运行的一些思路

    需求 本地开发python django应用程序,然后放到生产环境运行.使用了tensorflow,手动安装包很麻烦.生产环境不能联网,不能使用 pip freeze. 思路: 使用docker,直接 ...

  6. Java编程的逻辑 (80) - 定时任务的那些坑

    ​本系列文章经补充和完善,已修订整理成书<Java编程的逻辑>,由机械工业出版社华章分社出版,于2018年1月上市热销,读者好评如潮!各大网店和书店有售,欢迎购买,京东自营链接:http: ...

  7. JavaScript Scroll家族以及封装

    JavaScript Scroll家族以及封装 scrollTop & scrollLeft 别卷去的值,就是当滑动滚轮浏览网页的时候,网页隐藏在屏幕上方或左侧的距离 获得scrollTop ...

  8. redis Sentinel部署

    sentinel 系统用于管理多个 Redis 服务器(instance) 执行以下三个任务: 监控(Monitoring): Sentinel 会不断地检查你的主服务器和从服务器是否运作正常. 提醒 ...

  9. headfirst python 05, 06

    处理数据 with open('james.txt') as jaf: data = jaf.readLine() james = data.strip().split(',') #先去掉空格而否有, ...

  10. C# 窗口和程序的退出

    Application.Exit(); // 通知所有消息泵必须终止,并且在处理了消息以后关闭所有应用程序窗口. // 由 .NET Compact Framework 支持. Form.Close( ...