国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

nginx中SSI問題的研究

2019-11-15 02:09:45
字體:
來源:轉載
供稿:網友
nginx中SSI問題的研究

  最近感覺挺爽的,這個項目團隊沒有一個專門做php的,我是第一個進來做PHP(當然還有前端)的,哈哈,我會設計修改出適合我們業務的PHP框架,哈哈,感覺會學到很多東西的樣子,前幾天在組內20幾個前輩面前講php框架,以及跟大牛們探討適合我們的php框架,感覺表達能力太差了,知道的東西表達不清楚,還要我的導師去幫我表達,這里感謝下我的導師于洪磊(簡稱磊哥),磊哥簡直就是我的偶像,我沒見過那么有深度的程序員,技術牛B這是肯定的了,對技術外的了解超出了我的想象,磊哥看的書很多,涉獵很廣泛,尤其在歷史和文學方面,聊起天來有理有條、幽默風趣、時不時的引用幾句誰誰誰的文章,啊!真感覺不出來是一個技術大牛,更像是羅永浩那樣的人,哈哈,在最近2年磊哥就是我的目標,多看書、多講話,提高自己的表達能力,要不然自己知道的東西不能通過最直接的表達分享出去,這就很郁悶了。

  瞎扯了這么多,進入正題吧,今天要說的是一個關于SSI的問題,這里先介紹下SSI

  SSI是Server Side Inclde的縮寫,就是服務端包含的意思,我今天要說的只是用到了nginx中SSI模塊的include命令,這個命令會包含一個頁面,然后在nginx服務器中展開。

  我遇到的是什么問題呢?現在有個富文本編輯編輯器,要求保存頁面篇,輸入一些html(包括SSI include命令),然后保存在數據庫,保存之后還要求可以編輯,要求富文本編輯器中的內容就像這樣內容就像下面這樣:

<html><head></head><body><!--#include virtual="/sinclude/test.shtml"--><div>Hello World!!!</div></body></html>

  問題就處在了這里,這里面包含了ssi命令。

  這個如果直接訪問的只顯示Hello World!!!,我們對nginx做如下配置:

ssi on;ssi_types text/html;

  這個時候如果有mime type為text/shtml類型的數據通過nginx的時候,nginx就回去解析這些命令,這導致了個問題,我在數據庫中查出數據然后返回給客戶端富文本編輯器就會出錯,我的echo內容如下所示:

<!--# 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:

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

  果然,在修改了mime之后,輸出和數據庫中的一致,原封不動:

  看樣子問題解決了,但是沒想到由于歷史原因,后臺的編輯框內內容和其他內容是一起返回的,這下囧了,如果設置為text/plain所有的內容都已文本形式顯示在瀏覽器,問題等于還是沒有解決~~

  這個時候想到nginx配置,由于需要nginx進行解析展開的文件一般為shtml、html等后綴,而查數據庫一般為php所以我可以將ssi的所用于縮小為后綴名為shtml、html的文件,看看配置,這里我講ssi配置信息移動到一個匹配中,再看看效果,

        location ~* /.(html|shtml|htm)$ {            ssi on;            ssi_types text/shtml;            PRoxy_pass http://www.testssi.com;        }

  新建html、php文件,內容類似,

<?phpecho '<!--# include virtual="/sinclude/test.shtml" -->';echo '<!--# include virtual="/sinclude/test1.shtml" -->';echo '<!--# include virtual="/sinclude/test2.shtml" -->';echo 'TEst!!';

  html:

<!--# 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哦配置

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

  

  本文版權歸作者iforever(luluyrt@163.com)所有,未經作者本人同意禁止任何形式的轉載,轉載文章之后必須在文章頁面明顯位置給出作者和原文連接。


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 荃湾区| 牡丹江市| 文成县| 洪泽县| 迁西县| 永胜县| 运城市| 桃园县| 营口市| 云浮市| 海宁市| 明光市| 普宁市| 天台县| 安阳县| 红桥区| 平乐县| 九寨沟县| 宁武县| 宁城县| 汾西县| 寻甸| 曲麻莱县| 岳池县| 禹州市| 桐庐县| 阳城县| 云南省| 靖江市| 九龙县| 姜堰市| 深水埗区| 五大连池市| 竹山县| 无锡市| 乳山市| 博白县| 桓仁| 昭平县| 靖宇县| 张家口市|