麻豆小视频在线观看_中文黄色一级片_久久久成人精品_成片免费观看视频大全_午夜精品久久久久久久99热浪潮_成人一区二区三区四区

首頁 > 網站 > Nginx > 正文

Nginx如何實現pathinfo模式的方法詳解

2024-08-30 12:29:12
字體:
來源:轉載
供稿:網友

什么是pathinfo模式呢?

pathinfo是偽靜態的一種,我們先解釋一下偽靜態的概念,偽靜態頁面是靜態URL與動態URL互通的一個橋梁,它是指動態網址通過URL重寫的手段去掉其動態參數,使URL靜態化,但在實際的網頁目錄中并沒有重寫URL。簡單來說,偽靜態URL就是通過服務器轉換偽裝文件名或地址,使該頁面類似于靜態頁面,但服務器上沒有獨立存在的文件,其本質還是動態頁面。

使用過 ThinkPHP 框架開發應用的同學應該都會知道,它有一種 URL 模式就是 pathinfo,看起來類似下面的 URL:

http://example.com/module/controller/action/key1/value1/key2/value2.html

其實上面的 URL 的原型是下面的樣子:

// 這個才是正宗的 URL,上面那個是冒牌的http://example.com/index.php?m=module&c=controller&a=action&key1=value1&key2=value2

既然 pathinfo 模式的 URL 不是正宗的,那為什么不用正宗的呢,用正宗的不好嗎?相對于正宗的 URL,pathinfo 模式的確實是有優勢的,以下簡單列舉幾項它的好處。

  • 它提供了最好的SEO支持
  • 可以實現 URL 的偽靜態
  • 它看起來更簡潔、更好看

pathinfo 模式的 URL 有這么多優點,那我們肯定要支持了。ThinkPHP 更多的 URL 模式配置及實現,可以參考這篇文檔。

本文主要討論的是 pathinfo 模式的 URL 在 Nginx 中的實現,ThinkPHP 官方文檔中沒有介紹,但是它實現起來也挺簡單的。以下是實現過程的一些思考。

一個標準的通用的 URL 格式是類似下面那樣子的:

<scheme>://<user>:<password>@<host>:<port>/<path>;<params>?<query>#<frag>

參照通用的 URL 格式,對比可以發現,pathinfo 模式的相對于標準模式的 URL,有兩個地方的區別比較大,一個是沒有了 index.php 文件,另一個是查詢參數并沒有使用符號“?”隔開。

現在要做的就是在 Nginx 接收的 pathinfo 模式的 URL 請求時,將它還原成標準的 URL 模式,這樣服務器就能正常處理了。

把缺失的 index.php 文件補上

這個需要用到 Nginx 的 rewrite 指令,它的作用是將請求的 URI 替換成目標 URL。在這里需要達到的效果是,將

http://example.com/module/controller/action/key1/value1/key2/value2.html

替換成

http://example.com/index.php/module/controller/action/key1/value1/key2/value2.html

當然,并不是所有的 URI 都會進行此規則的重寫,只有那些不是文件的 URI 才進行重寫。所以,關于重寫的指令將會類似下面的:

# 如果請求的文件不存在,則進行 URI 重寫# 在原有的基礎上添加入口文件 index.phpif (!-e $request_filename) { rewrite ^/(.*)$ /index.php/$1 last;}

通過以上配置就能達到補全 index.php 入口文件的效果了。

區分符號 ?前后的內容

在通用的 URL 中,符號“?”是具有特殊作用的,它是用來將查詢字符串和前面的文件隔開。在 pathinfo 模式的 URL 中,符號“?”沒有了,也就是說,服務器無法區分 URI 中哪些是文件,哪些是查詢字符串了。所以,我們的目的是將 pathinfo 模式中本來應該由符號“?”區分的內容給手動區分開來。

還好,Nginx 中有個指令可以實現我們的目的,fastcgi_split_path_info。它可以將正則表達式定義的兩個串分別賦值給變量 $fastcgi_script_name 和變量 $fastcgi_path_info,以供后文使用。更多關于 fastcgi_split_path_info 的信息,請查閱這里

相關配置類似下面的代碼:

location ~ ^(.+/.php)(.*)$ { root /var/www/html/$vhost_path; fastcgi_pass phpfpm:9000; fastcgi_split_path_info ^(.+/.php)(.*)$; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; fastcgi_param PATH_INFO $fastcgi_path_info; include fastcgi_params;}

一個簡單的例子

通過上面兩部份的配置,現在的 Nginx 服務器已經支持 pathinfo 模式的 URL 了,以下是一個簡單的 server 配置,僅供參考:

server { listen 80; server_name tp5.loc; set $vhost_path tp5/public; location / { root /usr/share/nginx/html/$vhost_path; index index.php index.html index.htm; if (!-e $request_filename) {  rewrite ^/(.*)$ /index.php/$1 last; } } location ~ ^(.+/.php)(.*)$ { root /var/www/html/$vhost_path; fastcgi_pass phpfpm:9000; fastcgi_split_path_info ^(.+/.php)(.*)$; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; fastcgi_param PATH_INFO $fastcgi_path_info; include fastcgi_params; }}

總結

以上就是這篇文章的全部內容了,希望本文的內容對大家的學習或者工作具有一定的參考學習價值,如果有疑問大家可以留言交流,謝謝大家對VEVB武林網的支持。


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 亚洲资源在线 | 136福利视频 | 视频一区二区三区免费观看 | 黄视频在线网站 | 精品免费久久 | 亚洲精品欧美二区三区中文字幕 | 国内毛片视频 | 国产精品视频yy9299一区 | 在线中文字幕播放 | 日韩高清电影 | 九色中文字幕 | 国产一级免费在线视频 | 亚洲爱爱图 | 亚洲视屏在线观看 | 国产一区二区三区高清 | 视频一区 日韩 | 成人综合一区二区 | 国产wwww | 国产精品久久久久久久久久东京 | 婷婷亚洲一区二区三区 | 中文字幕网在线 | 日韩中文字幕三区 | 免费放黄网站在线播放 | 久青草免费视频 | 精国产品一区二区三区 | 久久久成人动漫 | 国产福利视频 | h视频免费观看 | 久国久产久精永久网页 | 久久96国产精品久久秘臀 | 黄色免费播放网站 | www.99av| 欧美91看片特黄aaaa | 美女污污在线观看 | 成人av一二三区 | 羞羞视频入口 | 国产98色 | 国产成人精品午夜视频' | 黄色毛片免费视频 | 久久久久久久久成人 | 牛牛碰在线视频 |