最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

nginx下支持PATH_INFO的方法實例詳解

 更新時間:2016年02月04日 11:05:24   作者:Charlie  
這篇文章主要介紹了nginx下支持PATH_INFO的方法,結合實例形式詳細分析了nginx下使用PATH_INFO模式的具體方法與相關使用技巧,需要的朋友可以參考下

本文實例分析了nginx下支持PATH_INFO的方法。分享給大家供大家參考,具體如下:

要想讓nginx支持PATH_INFO,首先需要知道什么是pathinfo,為什么要用pathinfo?

pathinfo不是nginx的功能,pathinfo是php的功能。

php中有兩個pathinfo,一個是環(huán)境變量$_SERVER['PATH_INFO'];另一個是pathinfo函數(shù),pathinfo() 函數(shù)以數(shù)組的形式返回文件路徑的信息;。

nginx能做的只是對$_SERVER['PATH_INFO]值的設置。

下面我們舉例說明比較直觀。先說php中兩種pathinfo的作用,再說如何讓nginx支持pathinfo。

php中的兩個pathinfo

php中的pathinfo()

pathinfo()函數(shù)可以對輸入的路徑進行判斷,以數(shù)組的形式返回文件路徑的信息,數(shù)組包含以下元素。

[dirname]  路徑的目錄
[basename] 帶后綴 文件名
[extension]  文件后綴
[filename]  不帶后綴文件名(需php5.2以上版本)

例如

<?php
print_r(pathinfo("/nginx/test.txt"));
?>

輸出

Array
(
  [dirname] => /nginx
  [basename] => test.txt
  [extension] => txt
  [filename] => test
)

php中的$_SERVER['PATH_INFO']

PHP中的全局變量$_SERVER['PATH_INFO'],PATH_INFO是一個CGI 1.1的標準,經(jīng)常用來做為傳參載體。

被很多系統(tǒng)用來優(yōu)化url路徑格式,最著名的如THINKPHP框架。

對于下面這個網(wǎng)址:

http://www.test.cn/index.php/test/my.html?c=index&m=search

我們可以得到 $_SERVER['PATH_INFO'] = '/test/my.html',而此時 $_SERVER['QUERY_STRING'] = 'c=index&m=search';

如果不借助高級方法,php中http://www.test.com/index.php?type=search 這樣的URL很常見,大多數(shù)人可能會覺得不太美觀而且對于搜索引擎也是非常不友好的(實際上有沒有影響未知),因為現(xiàn)在的搜索引擎已經(jīng)很智能了,可以收入帶參數(shù)的后綴網(wǎng)頁,不過大家出于整潔的考慮還是想希望能夠重寫URL,

下面是一段解析利用PATH_INFO的進行重寫的非常簡單的代碼:

<?php
if(!isset($_SERVER['PATH_INFO'])) {
  $pathinfo = 'default';
} else {
  $pathinfo = explode('/', $_SERVER['PATH_INFO']);
}
if(is_array($pathinfo) && !empty($pathinfo)) {
  $page = $pathinfo[1];
} else {
  $page = 'default.php';
}
?>

有了以上認識我們就可以介入nginx對$_SERVER['PATH_INFO']支持的問題了。在這之前還要介紹一個php.ini中的配置參數(shù)cgi.fix_pathinfo,它是用來對設置cgi模式下為php是否提供絕對路徑信息或PATH_INFO信息。沒有這個參數(shù)之前PHP設置絕對路徑PATH_TRANSLATED的值為SCRIPT_FILENAME,沒有PATH_INFO值。設置這個參數(shù)為cgi.fix_pathinfo=1后,cgi設置完整的路徑信息PATH_TRANSLATED的值為SCRIPT_FILENAME,并且設置PATH_INFO信息;如果設為cgi.fix_pathinfo=0則只設置絕對路徑PATH_TRANSLATED的值為SCRIPT_FILENAME。cgi.fix_pathinfo的默認值是1。

nginx默認是不會設置PATH_INFO環(huán)境變量的的值,需要php使用cgi.fix_pathinfo=1來完成路徑信息的獲取,但同時會帶來安全隱患,需要把cgi.fix_pathinfo=0設置為0,這樣php就獲取不到PATH_INFO信息,那些依賴PATH_INFO進行URL美化的程序就失效了。

1.可以通過rewrite方式代替php中的PATH_INFO

實例:thinkphp的pathinfo解決方案

設置URL_MODEL=2

location / {
  if (!-e $request_filename){
    rewrite ^/(.*)$ /index.php?s=/$1 last;
  }
}

2.nginx配置文件中設置PATH_INFO值

請求的網(wǎng)址是/abc/index.php/abc

PATH_INFO的值是/abc
SCRIPT_FILENAME的值是$doucment_root/abc/index.php
SCRIPT_NAME /abc/index.php

舊版本的nginx使用如下方式配置

location ~ .php($|/) {
  set $script $uri;
  set $path_info "";
  if ($uri ~ "^(.+.php)(/.+)") {
    set $script $1;
    set $path_info $2;
  }
  fastcgi_pass 127.0.0.1:9000;
  fastcgi_index index.php;
  fastcgi_param SCRIPT_FILENAME $document_root$script;
  fastcgi_param SCRIPT_NAME $script;
  fastcgi_param PATH_INFO $path_info;
}

新版本的nginx也可以使用fastcgi_split_path_info指令來設置PATH_INFO,舊的方式不再推薦使用,在location段添加如下配置。

location ~ ^.+\.php {
 (...)
 fastcgi_split_path_info ^((?U).+\.php)(/?.+)$;
 fastcgi_param SCRIPT_FILENAME /path/to/php$fastcgi_script_name;
 fastcgi_param PATH_INFO $fastcgi_path_info;
 fastcgi_param PATH_TRANSLATED $document_root$fastcgi_path_info;
 (...)
}

最后可能有人要問為什么apache不會出現(xiàn)這個問題?

apache一般是以模塊的方式運行php,apache可以對$_SERVER['PATH_INFO']的值進行設置,不需要另外配置。

本文永久地址:http://blog.it985.com/7768.html
本文出自 IT985博客 ,轉載時請注明出處及相應鏈接。

希望本文所述對大家nginx服務器配置有所幫助。

相關文章

  • 如何利用nginx處理DDOS進行系統(tǒng)優(yōu)化詳解

    如何利用nginx處理DDOS進行系統(tǒng)優(yōu)化詳解

    防御DDOS是一個系統(tǒng)工程,攻擊花樣多,防御的成本高瓶頸多,防御起來即被動又無奈,下面這篇文章主要給大家介紹了關于如何利用nginx處理DDOS進行系統(tǒng)優(yōu)化的相關資料,文中通過示例代碼介紹的非常詳細,需要的朋友可以參考下
    2018-08-08
  • 實例詳解SpringBoot+nginx實現(xiàn)資源上傳功能

    實例詳解SpringBoot+nginx實現(xiàn)資源上傳功能

    這篇文章主要介紹了SpringBoot+nginx實現(xiàn)資源上傳功能,由于小編最近在使用nginx放置靜態(tài)資源問題,遇到很多干貨,特此分享到腳本之家平臺,供大家參考,需要的朋友可以參考下
    2019-10-10
  • 實現(xiàn)Nginx中使用PHP-FPM時記錄PHP錯誤日志的配置方法

    實現(xiàn)Nginx中使用PHP-FPM時記錄PHP錯誤日志的配置方法

    最近在本地搭建的LNMP的開發(fā)環(huán)境。為了開發(fā)的時候不影響前端的正常開發(fā)就屏蔽的PHP里面php.ini中的一些錯誤提示。但是這樣一來,就影響到了后端開發(fā)的一些問題比如不能及時調(diào)試開發(fā)中的一些問題
    2014-05-05
  • 配置Nginx服務器防止Flood攻擊的方法

    配置Nginx服務器防止Flood攻擊的方法

    這篇文章主要介紹了配置Nginx服務器防止Flood攻擊的方法,包括PHP的應用請求限制等降低負載的措施,需要的朋友可以參考下
    2015-06-06
  • 詳解 Nginx代理功能與負載均衡

    詳解 Nginx代理功能與負載均衡

    本篇文章主要介紹了詳解 Nginx代理功能與負載均衡,先描述一些關于代理功能的配置,再說明負載均衡詳細,有興趣的可以了解一下。
    2017-02-02
  • Nginx?Proxy?Manager的具體實現(xiàn)

    Nginx?Proxy?Manager的具體實現(xiàn)

    Nginx?Proxy?Manager?就是一個?Nginx?的代理管理器,本文主要介紹了Nginx?Proxy?Manager的具體實現(xiàn),具有一定的參考價值,感興趣的可以了解一下
    2024-05-05
  • prometheus監(jiān)控nginx的兩種方式

    prometheus監(jiān)控nginx的兩種方式

    這篇文章主要介紹了兩種不同的Nginx監(jiān)控方法,第一種是nginx自帶的tub_status模塊進行監(jiān)控,第二種是用vts監(jiān)控工具進行監(jiān)控,都是基于prometheus、grafana結合第三方模塊或監(jiān)控工具搭建,文中通過圖文結合的方式介紹的非常詳細,需要的朋友可以參考下
    2024-05-05
  • Nginx根據(jù)url中的path動態(tài)轉發(fā)到upstream的實現(xiàn)

    Nginx根據(jù)url中的path動態(tài)轉發(fā)到upstream的實現(xiàn)

    這篇文章主要介紹了Nginx根據(jù)url中的path動態(tài)轉發(fā)到upstream的實現(xiàn),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2020-01-01
  • 使用Docker實現(xiàn)Nginx反向代理

    使用Docker實現(xiàn)Nginx反向代理

    本文主要介紹了使用Docker實現(xiàn)Nginx反向代理,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2023-06-06
  • Mac M1 Nginx 配置多站點的實現(xiàn)

    Mac M1 Nginx 配置多站點的實現(xiàn)

    這篇文章主要介紹了Mac M1 Nginx 配置多站點的實現(xiàn),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2021-03-03

最新評論

昭觉县| 庆城县| 抚远县| 延津县| 葫芦岛市| 黄梅县| 衢州市| 宝鸡市| 洛阳市| 永登县| 南康市| 五莲县| 宜川县| 酉阳| 金乡县| 临西县| 东山县| 南华县| 奇台县| 德清县| 永寿县| 洛南县| 南昌市| 浦东新区| 中牟县| 东乡县| 双桥区| 嘉禾县| 西平县| 冕宁县| 广元市| 林州市| 福州市| 樟树市| 萝北县| 大名县| 玉溪市| 新乡县| 肇东市| 柯坪县| 康马县|