要想讓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"));php中的$_server['path_info']輸出:array
( [dirname] => /nginx
[basename] => test.txt
[extension] => txt
[filename] => test
)
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']))有了以上認識我們就可以介入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。else
if(is_array($pathinfo) && !empty($pathinfo))
else
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 ~ \.phpfastcgi_param script_filename $document_root$real_script_name;
fastcgi_param script_name $real_script_name;
fastcgi_param path_info $path_info;
}
location /最後總結: 【注意: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 ~ \.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}location ~ \.php
fastcgi_param script_filename $document_root$real_script_name;
fastcgi_param script_name $real_script_name;
fastcgi_param path_info $path_info;
}
}
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介面方式安全性也很差,現在已經很少被使用了。...