nginx中配置pathinfo模式示例

2022-08-29 16:27:41 字數 3052 閱讀 8082

要想讓nginx支援path_info,首先需要知道什麼是pathinfo,為什麼要用pathinfo?

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

php中有兩個pathinfo,乙個是環境變數$_server['path_info'];另乙個是pathinfo函式,pathinfo() 函式以陣列的形式返回檔案路徑的資訊;。

nginx能做的只是對$_server['path_info]值的設定。

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

php中的兩個pathinfo

php中的pathinfo()

pathinfo()函式可以對輸入的路徑進行判斷,以陣列的形式返回檔案路徑的資訊,陣列包含以下元素。

例如

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的標準,經常用來做為傳參載體。

被很多系統用來優化url路徑格式,最著名的如thinkphp框架。

對於下面這個**:

我們可以得到 $_server['path_info'] = 『/test/my.html』,而此時 $_server['query_string'] = 'c=index&m=search';

如果不借助高階方法,php中 這樣的url很常見,大多數人可能會覺得不太美觀而且對於搜尋引擎也是非常不友好的(實際上有沒有影響未知),因為現在的搜尋引擎已經很智慧型了,可以收入帶引數的字尾網頁,不過大家出於整潔的考慮還是想希望能夠重寫url,

下面是一段解析利用path_info的進行重寫的非常簡單的**:

if(!isset($_server['path_info']))

else

if(is_array($pathinfo) && !empty($pathinfo))

else

有了以上認識我們就可以介入nginx對$_server['path_info']支援的問題了。在這之前還要介紹乙個php.ini中的配置引數cgi.fix_pathinfo,它是用來對設定cgi模式下為php是否提供絕對路徑資訊或path_info資訊。沒有這個引數之前php設定絕對路徑path_translated的值為script_filename,沒有path_info值。設定這個引數為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環境變數的的值,需要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 / 

}

2.nginx配置檔案中設定path_info值

請求的**是/abc/index.php/abc

path_info的值是/abc

script_filename的值是$doucment_root/abc/index.php

script_name /abc/index.php

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

location ~ \.php

fastcgi_param script_filename $document_root$real_script_name;

fastcgi_param script_name $real_script_name;

fastcgi_param path_info $path_info;

}

location / 

}location ~ \.php

fastcgi_param script_filename $document_root$real_script_name;

fastcgi_param script_name $real_script_name;

fastcgi_param path_info $path_info;

}

最後總結: 【注意:location ~ \.php

}location ~ \.php

fastcgi_param script_filename $document_root$real_script_name;

# fastcgi_param script_name $real_script_name;

fastcgi_param path_info $path_info;

}

location / 

}location ~ \.php

fastcgi_param script_filename $document_root$real_script_name;

fastcgi_param script_name $real_script_name;

fastcgi_param path_info $path_info;

}

最後總結: 【注意:location ~ \.php

}

Nginx中FastCGI配置優化

fastcgi fastcgi是從cgi發展改進而來的。傳統cgi介面方式的主要缺點是效能很差,因為每次http伺服器遇到動態程式時都需要重新啟動指令碼解析器來執行解析,然後結果被返回給http伺服器。這在處理高併發訪問時,幾乎是不可用的。另外傳統的cgi介面方式安全性也很差,現在已經很少被使用了。...

Linux中配置Nginx教程

一 安裝準備 首先由於nginx的一些模組依賴一些lib庫,所以在安裝nginx之前,必須先安裝這些lib庫,這些依賴庫主要有g gcc openssl devel pcre devel和zlib devel 所以執行如下命令安裝 yum install gcc c yum install pcre...

Nginx中FastCGI配置優化

fastcgi fastcgi是從cgi發展改進而來的。傳統cgi介面方式的主要缺點是效能很差,因為每次http伺服器遇到動態程式時都需要重新啟動指令碼解析器來執行解析,然後結果被返回給http伺服器。這在處理高併發訪問時,幾乎是不可用的。另外傳統的cgi介面方式安全性也很差,現在已經很少被使用了。...