Pathinfo 是什么?
Pathinfo 是指 URL 路徑中不包含查詢字符串(Query String)部分的部分。例如:
http://www.example.com/index.php/path/to/file
這個 URL 中,path/to/file 就是 Pathinfo。在 Pathinfo 中,使用與 URL 相同的斜線(/)作為分隔符,傳遞數(shù)據(jù)或標(biāo)記執(zhí)行腳本的特定部分。若使用 PHP,Pathinfo 就是 $_SERVER['PATH_INFO'] 變量所代表的內(nèi)容。
使用 Pathinfo 優(yōu)點:
1. 更美觀、更優(yōu)雅的 URL。
2. 提高 SEO 優(yōu)化。
3. 美好的用戶體驗。
下面是一個基本的 nginx 支持 pathinfo 的配置文件:
location ~ \.php$ { fastcgi_pass 127.0.0.1:9000; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; include fastcgi_params; }它會將所有以 .php 結(jié)尾的請求都交給 PHP 解析,并加上 Pathinfo,將請求發(fā)送到 PHP-FPM。我們在 PHP 中可以通過 $_SERVER['PATH_INFO'] 獲取 Pathinfo 的值。 Nginx 實現(xiàn) Pathinfo 的原理: 在 URL 中,Nginx 會忽略 URI 中“?”后面跟隨的字符串,而將其作為 Query String,所以獲取 Query String 的值可使用 $_SERVER['QUERY_STRING'],通過 Nginx 引入 Pathinfo,傳遞地址欄中“?”前面的部分,它將會將 Pathinfo 的值附加在 SCRIPT_FILENAME 參數(shù)后面,使 PHP-FPM 認(rèn)為它是在執(zhí)行帶有 Pathinfo 的 URL。 舉個例子: 瀏覽器輸入的 URL 為: http://www.example.com/index.php/path/to/file?a=1&b=2 此時 Nginx 的 $request_uri 的值為: /index.php/path/to/file?a=1&b=2 $request_uri 值包含所有的 Query String 和 Pathinfo。因此,為了使 PHP-FPM 和 CodeIgniter 正確解析 Query String 和 Pathinfo,需要進行以下更改配置文件的設(shè)置:
fastcgi_param SCRIPT_FILENAME /var/www/html/public/index.php; fastcgi_param REQUEST_URI $request_uri; fastcgi_param DOCUMENT_URI $document_uri; fastcgi_param DOCUMENT_ROOT /var/www/html/public; fastcgi_param REMOTE_ADDR $remote_addr;將 SCRIPT_FILENAME 替換為您的”index.php”。這將允許 PHP 明白需要處理哪一個文件做出回應(yīng)。我們使用 $request_uri 取代了 $fastcgi_script_name。這是因為 $request_uri 包含了路徑和查詢參數(shù),而 fastcgi_script_name 不是。 Pathinfo 的使用方式: 我們在 CodeIgniter 框架中舉個例子,如果我們想訪問如下 URL: http://www.example.com/index.php/path/to/file/param 我們需要在控制器中通過 $_SERVER['PATH_INFO'] 獲取 Pathinfo 信息,將 param 當(dāng)做訪問的參數(shù)傳遞給相應(yīng)處理的方法。 這是我們在控制器類中的一個方法:
public function somemethod() { // retrieve the fifth segment of path_info $record_id = $this->uri->segment(5); // retrieve the query string $query_string = $this->input->server('QUERY_STRING'); // do what you need with the information echo "Record id: " . $record_id; echo "Query string: " . $query_string; }這個方法將返回: Record id: param Query string: a=1&b=2 如果您想在其他框架中使用 Pathinfo,可以遵循這個例子,自己實現(xiàn)相應(yīng)的邏輯。 總結(jié): Pathinfo 是一種 URL 的處理方式,通過它使 URL 更加優(yōu)雅,提升用戶體驗,提高 SEO 的效果。Nginx 配置中加入 Pathinfo 的支持,可以使您在PHP-FPM 中獲取到 Pathinfo 的值。在控制器或其他邏輯處理中獲取 Pathinfo 的值,亦可根據(jù)特定框架實現(xiàn)相應(yīng)的邏輯。
上一篇pathinfo php
下一篇password.php