欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Nginx如何實現(xiàn)pathinfo模式的方法詳解

 更新時間:2017年09月25日 11:43:28   作者:chenishr  
pathinfo是偽靜態(tài)的一種,對于用過thinkphp的朋友們來說應該都不陌生,下面這篇文章主要給大家介紹了關(guān)于Nginx如何實現(xiàn)pathinfo模式的方法,文中通過示例代碼介紹的非常詳細,需要的朋友可以參考下。

什么是pathinfo模式呢?

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

使用過 ThinkPHP 框架開發(fā)應用的同學應該都會知道,它有一種 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 模式的確實是有優(yōu)勢的,以下簡單列舉幾項它的好處。

  • 它提供了最好的SEO支持
  • 可以實現(xiàn) URL 的偽靜態(tài)
  • 它看起來更簡潔、更好看

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

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

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

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

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

現(xiàn)在要做的就是在 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 都會進行此規(guī)則的重寫,只有那些不是文件的 URI 才進行重寫。所以,關(guān)于重寫的指令將會類似下面的:

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

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

區(qū)分符號 ?前后的內(nèi)容

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

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

相關(guān)配置類似下面的代碼:

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;
}

一個簡單的例子

通過上面兩部份的配置,現(xiàn)在的 Nginx 服務器已經(jīng)支持 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;
 }
}

總結(jié)

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

相關(guān)文章

  • Nginx處理請求時的匹配規(guī)則詳析

    Nginx處理請求時的匹配規(guī)則詳析

    這篇文章主要給大家介紹了關(guān)于Nginx處理請求時的匹配規(guī)則的相關(guān)資料,文中通過示例代碼介紹的非常詳細,對大家學習或者使用Nginx具有一定的參考學習價值,需要的朋友們下面來一起學習學習吧
    2019-11-11
  • linux查找當前系統(tǒng)nginx路徑的兩種方法

    linux查找當前系統(tǒng)nginx路徑的兩種方法

    工作中有很多服務器, 它們上面裝的 nginx 的路徑也太不相當, 當我們拿到一個不熟悉的服務器時, 我們怎么知道, 當前運行的nginx的目錄是哪一個呢,本文小編給大家介紹了兩種linux查找當前系統(tǒng)nginx的路徑的方法,需要的朋友可以參考下
    2023-11-11
  • 重啟nginx后丟失nginx.pid的解決方法

    重啟nginx后丟失nginx.pid的解決方法

    本文介紹下,重啟nginx服務后丟失nginx.pid文件的解決方法,有需要的朋友,可以作個參考
    2014-01-01
  • Nginx1.21.6生產(chǎn)環(huán)境升級步驟

    Nginx1.21.6生產(chǎn)環(huán)境升級步驟

    這篇文章主要介紹了Nginx1.21.6生產(chǎn)環(huán)境升級步驟,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2022-01-01
  • nginx proxy_redirect https配置后端http302跳轉(zhuǎn)處理方式

    nginx proxy_redirect https配置后端http302跳轉(zhuǎn)處理方式

    這篇文章主要介紹了nginx proxy_redirect https配置后端http302跳轉(zhuǎn)處理方式,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-06-06
  • Nginx 負載均衡算法及故障轉(zhuǎn)移解析

    Nginx 負載均衡算法及故障轉(zhuǎn)移解析

    這篇文章主要介紹了Nginx 負載均衡算法及故障轉(zhuǎn)移解析,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2019-09-09
  • nginx使用內(nèi)置模塊配置限速限流的方法實例

    nginx使用內(nèi)置模塊配置限速限流的方法實例

    Nginx現(xiàn)在已經(jīng)是最火的負載均衡之一,在流量陡增的互聯(lián)網(wǎng)面前,接口限流也是很有必要的,尤其是針對高并發(fā)的場景,下面這篇文章主要給大家介紹了關(guān)于nginx使用內(nèi)置模塊配置限速限流的相關(guān)資料,需要的朋友可以參考下
    2022-05-05
  • Nginx手動編譯、安裝超詳細教程

    Nginx手動編譯、安裝超詳細教程

    Nginx安裝除了編譯以外,我們還可以直接用操作系統(tǒng)上自帶的工具比如說yum、apt-get直接安裝,這篇文章主要介紹了Nginx手動編譯、安裝超超詳解,需要的朋友可以參考下
    2023-09-09
  • nginx實現(xiàn)IP地址透傳的示例代碼

    nginx實現(xiàn)IP地址透傳的示例代碼

    默認后端服務器只能看到是前端nginx調(diào)度器訪問的本機,本文主要介紹了nginx實現(xiàn)IP地址透傳的示例代碼,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2024-08-08
  • nginx http重定向https配置說明

    nginx http重定向https配置說明

    這篇文章主要介紹了nginx http重定向https配置說明的相關(guān)資料,需要的朋友可以參考下
    2017-04-04

最新評論