服务器脚本以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; 这句就是去加载伪静态文件,把所有的规则写在这里面,注意这里要使用全路径,不然不成功。

转载于:https://www.cnblogs.com/zhengchunyuan/p/9340372.html

nginx伪静态之try_files和rewrite讲解相关推荐

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

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

  2. nginx伪静态规则

    nginx伪静态规则 要将http://dede.com/index.php?t=3用伪静态规则改写成http://dede.com/t3.html,即可在nginx的conf/nginx.conf里 ...

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

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

  4. linux nginx htaccess,nginx支持.htaccess文件实现rewrite伪静态

    在网上查到的资料很多人都说nginx目前不支持.htaccess文件来做伪静态,小子也觉得不应该,作为世界上轻量级最好用的WEB服务器,Nginx应该可以的,谷歌了一下,找到了nginx完全可以支持. ...

  5. 宝塔网设置伪静态进行隐藏php后缀名,nextcloud宝塔面板nginx伪静态-去除index.php

    Loading... > 一直在用nextcloud作为个人网盘用,前段时间电信赠送了一台vps,重新安装了nextcloud并使用了宝塔面板作为管理工具,安装方法和安装后的报警解决可以参考 C ...

  6. zblog php伪静态,ZBLOG PHP版本Apache和Nginx伪静态规则以及设置方法

    一般而言,如果我们个人搭建网站挂一个博客程序就可以实现站长的梦想(有很多知名个人博主,单单一个博客就能叱咤网络风云),我们搭建网站肯定会选择一款体贴的CMS,不需要复杂的内容管理系统,也不需要难以运营 ...

  7. Yii2配置Nginx伪静态的方法

    这篇文章主要介绍了Yii2配置Nginx伪静态的方法,结合实例形式分析了Yii2框架针对Nginx伪静态的相关配置技巧,需要的朋友可以参考下 本文实例讲述了Yii2配置Nginx伪静态的方法.分享给大 ...

  8. php商城伪静态,友价商城nginx伪静态源码规则

    不少朋友搭建完友价 T5 源码商城后发现很多页面无法正常打开,其实是伪静态没做好. 在这里我推荐使用宝塔搭建,将下面伪静态规则复制到:网站-管理-伪静态-保存即可 一般网站有自带的apache规则,但 ...

  9. 在nginx环境下同一个网站目录下放2个或者多个zblog程序nginx伪静态规则如何写

    在nginx环境下同一个网站目录下放2个或者多个zblog程序nginx伪静态规则如何写 昨天升级完内核,主站主域名下还有2个zblog程序,升级完后忘记以前伪静态规则咋写了,zblog本身的是: i ...

最新文章

  1. 给你一个亿的keys,Redis如何统计?
  2. 成都网络推广带大家了解一个好的标题需遵循的原则有哪些?
  3. opensuse13.2 安裝五笔
  4. Nodejs与mysql连接池的应用(pool)
  5. 4月13日学习笔记——jQuery动画
  6. EXT4.2--Ext Designer 使用
  7. P6466-分散层叠算法(Fractional Cascading)【模板】
  8. ImportError: cannot import name 'pyopenpose' from 'openpose'错误解决方法
  9. Apple Watch新玩法:手势操控无人机
  10. C#中的线程二(BeginInvoke和Invoke)
  11. 拓端tecdat|MATLAB中的马尔可夫区制转移(Markov regime switching)模型
  12. 【TSP】基于matlab遗传算法求解30城市旅行商问题【含Matlab源码 135期】
  13. Android SDK的下载与安装
  14. 阿里云 DataV 产品简介
  15. 思维导图c语言java区别_C语言基本数据类型的思维导图
  16. 为啥扫描服务器端口无响应,服务器端口扫描工具
  17. 如何将eslipse的背景色变为暗黑色
  18. 用微信扫一扫功能扫描二维码下载安装APK不能用,不能打开APK下载链接的解决方案
  19. 多变量微分方程组带事件控制的ODE45函数写法
  20. 回文素数(杭电OJ,不喜欢这个题)

热门文章

  1. 根据当前时间判断上午好、下午好
  2. hdu1171 转化01背包,组合
  3. 使用NodeList
  4. Windows:让Windows XP中的IIS支持多站点的工具
  5. python爬歌词生成词云图_爬取每日热搜词,生成地图词云图
  6. openwrt 遍译php_完全新手教程:编译openwrt全过程
  7. 251f与ips屏显示器对比_1千多元预算,2020年PS平面设计/摄影后期显示器推荐/选购指南(2k+高色域屏)...
  8. python修改电脑名称_修改计算机名称
  9. c语言链表如何做成环,在C语言中单向链表环测试并返回环起始节点的实现方法...
  10. getname java_关于java:只获取类Class.getName()的名称