最近感觉挺爽的,这个项目团队没有一个专门做PHP的,我是第一个进来做PHP(当然还有前端)的,哈哈,我会设计修改出适合我们业务的PHP框架,哈哈,感觉会学到很多东西的样子,前几天在组内20几个前辈面前讲php框架,以及跟大牛们探讨适合我们的php框架,感觉表达能力太差了,知道的东西表达不清楚,还要我的导师去帮我表达,这里感谢下我的导师于洪磊(简称磊哥),磊哥简直就是我的偶像,我没见过那么有深度的程序员,技术牛B这是肯定的了,对技术外的了解超出了我的想象,磊哥看的书很多,涉猎很广泛,尤其在历史和文学方面,聊起天来有理有条、幽默风趣、时不时的引用几句谁谁谁的文章,啊!真感觉不出来是一个技术大牛,更像是罗永浩那样的人,哈哈,在最近2年磊哥就是我的目标,多看书、多讲话,提高自己的表达能力,要不然自己知道的东西不能通过最直接的表达分享出去,这就很郁闷了。

  瞎扯了这么多,进入正题吧,今天要说的是一个关于SSI的问题,这里先介绍下SSI

  SSI是Server Side Inclde的缩写,就是服务端包含的意思,我今天要说的只是用到了nginx中SSI模块的include命令,这个命令会包含一个页面,然后在nginx服务器中展开。

  我遇到的是什么问题呢?现在有个富文本编辑编辑器,要求保存页面篇,输入一些html(包括SSI include命令),然后保存在数据库,保存之后还要求可以编辑,要求富文本编辑器中的内容就像这样内容就像下面这样:

1
2
3
4
5
6
7
8
<html>
<head>
</head>
<body>
    <!--#include virtual="/sinclude/test.shtml"-->
    <div>Hello World!!!</div>
</body>
</html>

  问题就处在了这里,这里面包含了ssi命令。

  这个如果直接访问的只显示Hello World!!!,我们对nginx做如下配置:

1
2
ssi on;
ssi_types text/html;

  这个时候如果有mime type为text/shtml类型的数据通过nginx的时候,nginx就回去解析这些命令,这导致了个问题,我在数据库中查出数据然后返回给客户端富文本编辑器就会出错,我的echo内容如下所示:

1
2
3
<!--# include virtual="/sinclude/test.shtml" -->
<!--# include virtual="/sinclude/test1.shtml" -->
<!--# include virtual="/sinclude/test2.shtml" -->

  页面会显示这种形式:

  这我就有点郁闷了,因为服务器上其他功能必须用到ssi,而我这里又不需要,这个该怎么办呢?

  这个时候我想到了ssi_types,这里面设置的是text/html,而常用的还有一种text/plain,这种类型的mime是什么呢,在浏览器中他会把所有的内容原封不动的显示出来,不去进行解析html、css。用了这种类型,nginx就不会进行展开了,试试在输出之前修改mime:

1
header('Content-type: text/plain');

  果然,在修改了mime之后,输出和数据库中的一致,原封不动:

  看样子问题解决了,但是没想到由于历史原因,后台的编辑框内内容和其他内容是一起返回的,这下囧了,如果设置为text/plain所有的内容都已文本形式显示在浏览器,问题等于还是没有解决~~

  这个时候想到nginx配置,由于需要nginx进行解析展开的文件一般为shtml、html等后缀,而查数据库一般为php所以我可以将ssi的所用于缩小为后缀名为shtml、html的文件,看看配置,这里我讲ssi配置信息移动到一个匹配中,再看看效果,

1
2
3
4
5
location ~* \.(html|shtml|htm)$ {
    ssi on;
    ssi_types text/shtml;
    proxy_pass http://www.testssi.com;
}

  新建html、php文件,内容类似,

1
2
3
4
5
<?php
echo '<!--# include virtual="/sinclude/test.shtml" -->';
echo '<!--# include virtual="/sinclude/test1.shtml" -->';
echo '<!--# include virtual="/sinclude/test2.shtml" -->';
echo 'TEst!!';

  html:

1
2
3
4
<!--# include virtual="/sinclude/test.shtml" -->
<!--# include virtual="/sinclude/test1.shtml" -->
<!--# include virtual="/sinclude/test2.shtml" -->
TEst!!

  会发现php访问只输出了Test!!,其他内容要查看源码才可以看见,html中则会进行解析,输出对应包含文件的内容或者没找到报错!!至此问题基本解决了,具体情况下周上班之后试下这个方法,应该没问题,测试的时候都是ok的。

  今天在实际代码中没有用这些,使用了一个简单的函数,哈哈,将大小于号转化为html编码,nginx解析ssi的时候不认识,但是浏览器还是认识的,ok,问题解决,没有修改nginx哦配置

1
2
3
function escape_ssi($str){
    return preg_replace(array('/</''/>/'), array('<''>'), $str);
}

来源:http://www.cnblogs.com/iforever/p/4417428.html

nginx中SSI问题的研究相关推荐

  1. nginx 中location和root,你确定真的明白他们关系?

    最近公司开发新项目,web server使用nginx,趁周末小小的研究了一下,一不小心踩了个坑吧,一直404 not found!!!!!当时卡在location和root中,但是网上却比较少聊这方 ...

  2. 在nginx中集成lua脚本:添加自定义Http头,封IP等

    Lua是一个可以嵌入到Nginx配置文件中的动态脚本语言,从而可以在Nginx请求处理的任何阶段执行各种Lua代码.刚开始我们只是用Lua 把请求路由到后端服务器,但是它对我们架构的作用超出了我们的预 ...

  3. 为Nginx开启SSI模块以支持SHTML及include文件引入

    SSI 是 Server Side Include 的首字母缩略词.包含有嵌入式服务器方包含命令的 HTML 文本.在被传送给浏览器之前,服务器会对 SHTML 文档进行完全地读取.分析以及修改. 在 ...

  4. http响应Last-Modified和ETag以及Apache和Nginx中的配置

    基础知识 1) 什么是"Last-Modified"? 在浏览器第一次请求某一个URL时,服务器端的返回状态会是200,内容是你请求的资源,同时有一个Last-Modified的属 ...

  5. Nginx中server_name 参数详解

    Nginx中的server_name指令主要用于配置基于名称的虚拟主机,server_name指令在接到请求后的匹配顺序分别为: 1.准确的server_name匹配,例如: server {list ...

  6. 【博士论文】视觉语言交互中的视觉推理研究

    来源:专知 本文为论文,建议阅读5分钟 本文通过单轮交互和多轮交互两个场景,分别选取指称语理解和视觉对话两个代表性任务进行阐述. 来自中国人民大学牛玉磊的博士论文,入选2021年度"CCF优 ...

  7. 文章推荐 | 城市规划中城市信息学的研究进展

    来源:北京城市实验室BCL 随着计算机技术的飞速发展,城市信息学作为城市规划领域的一门新兴学科,逐渐引起学术界的关注.城市信息学的兴起给城市规划带来了新的压力,但它也提供了新的城市分析视角.在此背景下 ...

  8. nginx中的502错误

    遇到这种情况,首先看一下慢日志 [17-Aug-2015 13:13:43] WARNING: [pool www] child 27780, script '/data/s.com/index.ph ...

  9. 《中国人工智能学会通讯》——3.15 社交媒体中的谣言识别研究及其发展趋势...

    3.15 社交媒体中的谣言识别研究及其发展趋势 随着计算机和互联网技术的不断发展,社会已经进入了信息互联和人的互联高度融合的时代,人们可以在网络上自由地发布.传播和获取信息:人与人之间的联系也更加紧密 ...

最新文章

  1. 波士顿动力机器狗量产版首次亮相:先造100台,能当警犬能工地巡逻
  2. 数据库中的数据类型和c#的数据类型的映射表[转]
  3. 广义hough变换matlab,matlab – 广义Hough R表
  4. haproxy配置文件
  5. mysql5.6时间问题_mysql5.6版本java插入时间的错误
  6. 雅可比旋转求解对称二维矩阵的特征值和特征向量
  7. tornado 学习注意事项--00
  8. Eraser unused space 失败的原因分析!
  9. Enum枚举类|注解Annotation
  10. 全方位解析阿里云核心技术竞争力,CSDN 独家在线峰会来了!
  11. JQuery的click、bind、delegate、off、unbind
  12. MySQL可视化工具之Navicat for MySQL
  13. 蜡笔小新钢达姆机器人_《蜡笔小新》当中出现的组合,小伙伴们最喜欢谁?
  14. 查找数据库指定数据的数据表和字段名称SQL语句
  15. JAVA通过Hutool解析CSV文件【导入即用,无需封装】
  16. 十几岁就是很有名的黑客,阿里巴巴的守护神,每天挡下无数次黑客攻击,他的工资有多少?
  17. 数风流人物还看今朝|前后端分离微服务项目常用中间件以及指令
  18. Docker入门(基础篇+高级篇)
  19. 高红梅:第四章 第三节 现代工业文明的反思与高贵野蛮人的身份认同
  20. php7 css样式不支持,div错位/解决IE6、IE7、IE8样式不兼容问题_html/css_WEB-ITnose

热门文章

  1. fillstyle属性_html设置或返回用于填充绘画的颜色渐变或模式的属性fillStyle
  2. 06_clickhouse、表和列的TTL规则与实践、表和列的TTL、列级TTL、表级TTL、列级TTL示例、表级TTL示例
  3. 7.MongoDB java CRUD
  4. 数据库工程开发秘籍之TSQL 存储过程user stored procedure的概念与案例实战
  5. aop阻止方法运行_Spring AOP无法拦截内部方法调用
  6. 命令行下操作MySQL数据库,各种命令的使用入门示例。(附图)
  7. 使用gpu(gtx1080) cudnn 5.1下编译faster rcnn
  8. 天猫上线“商家售后服务评价”功能,消费者体验将纳入商家考核指标
  9. 【笔记】metasploit渗透测试魔鬼训练营-信息搜集
  10. 汽车之家10周年办演唱会,厂商们怎么看?