您好,登錄后才能下訂單哦!
本篇內容介紹了“PATH_INFO模式是什么”的有關知識,在實際案例的操作過程中,不少人都會遇到這樣的困境,接下來就讓小編帶領大家學習一下如何處理這些情況吧!希望大家仔細閱讀,能夠學有所成!
PATH_INFO 模式是偽靜態的一種。
我們可以使用PATH_INFO來代替Rewrite來實現偽靜態頁面, 另外不少PHP框架也使用PATH_INFO來作為路由載體
偽靜態頁面是靜態URL與動態URL互通的一個橋梁,它是指動態網址通過URL重寫的手段去掉其動態參數,使URL靜態化,但在實際的網頁目錄中并沒有重寫URL。
簡單來說,偽靜態URL就是通過服務器轉換偽裝文件名或地址,使該頁面類似于靜態頁面,但服務器上沒有獨立存在的文件,其本質還是動態頁面。
PATH_INFO是服務器狀態中的一個參數,PHP通過$_SERVER[‘PATH_INFO’]可以查看內容
Apache
在Apache中, 當不加配置的時候, 對于PHP腳本, Accept pathinfo是默認接受的
apache下配置如下
RewriteEngine on RewriteCond %{REQUEST_FILENAME} !-d RewriteCond %{REQUEST_FILENAME} !-f RewriteRule ^(.*).html$ index.php/$1 [QSA,PT,L]
Nginx
通過 fastcgi_split_path_info
指令支持pathinfo模式,
簡單的配置如下:
server { listen 80; server_name chris.demo.com; root /home/wwwroot/chris/; location / { if (!-e $request_filename) { rewrite ^(.*)$ /index.php?s=/$1 last; break; } } location ~ \.php(.*)$ { fastcgi_index index.php; ##默認是使用unix socket 通訊,后面修改了php-fpm 的配置,改為 tcp 通訊 ##fastcgi_pass unix:/run/php/php7.3-fpm.sock; ##unix socket fastcgi_pass 127.0.0.1:9000; ##TCP ##增加 fastcgi_split_path_info指令,將URI匹配成PHP腳本的URI和pathinfo兩個變量 ##即$fastcgi_script_name 和$fastcgi_path_info fastcgi_split_path_info ^(.+\.php)(.*)$; ##PHP中要能讀取到pathinfo這個變量 ##就要通過fastcgi_param指令將fastcgi_split_path_info指令匹配到的pathinfo部分賦值給PATH_INFO ##這樣PHP中$_SERVER['PATH_INFO']才會存在值 fastcgi_param PATH_INFO $fastcgi_path_info; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; fastcgi_param PATH_TRANSLATED $document_root$fastcgi_path_info; include fastcgi_params; } }
配置完成后重啟nginx , php-fpm 服務,已經可以成功請求
創建入口文件 index.php , 通過$_SERVER[‘PATH_INFO’]獲取信息
http://chris.demo.com/index.php/Home/index/chris
<?php var_dump($_SERVER['PATH_INFO']); //string(17) "/Home/index/chris"
可以看到,我們獲取到了入口文件后的路徑信息。
“PATH_INFO模式是什么”的內容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業相關的知識可以關注億速云網站,小編將為大家輸出更多高質量的實用文章!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。