国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專(zhuān)欄INFORMATION COLUMN

Nginx 實(shí)現(xiàn) pathinfo 模式

econi / 1109人閱讀

摘要:現(xiàn)在要做的就是在接收的模式的請(qǐng)求時(shí),將它還原成標(biāo)準(zhǔn)的模式,這樣服務(wù)器就能正常處理了。還好,中有個(gè)指令可以實(shí)現(xiàn)我們的目的,。

使用過(guò) ThinkPHP 框架開(kāi)發(fā)應(yīng)用的同學(xué)應(yīng)該都會(huì)知道,它有一種 URL 模式是 pathinfo,看起來(lái)類(lèi)似下面的 URL:

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

其實(shí)上面的 URL 的原型是下面的樣子:

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

既然 pathinfo 模式的 URL 不是正宗的,那為什么不用正宗的呢,用正宗的不好嗎?相對(duì)于正宗的 URL,pathinfo 模式的確實(shí)是有優(yōu)勢(shì)的,以下簡(jiǎn)單列舉幾項(xiàng)它的好處。

它提供了最好的SEO支持

可以實(shí)現(xiàn) URL 的偽靜態(tài)

它看起來(lái)更簡(jiǎn)潔、更好看

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

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

一個(gè)標(biāo)準(zhǔn)的通用的 URL 格式是類(lèi)似下面那樣子的:

://:@:/;?#

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

現(xiàn)在要做的就是在 Nginx 接收的 pathinfo 模式的 URL 請(qǐng)求時(shí),將它還原成標(biāo)準(zhǔn)的 URL 模式,這樣服務(wù)器就能正常處理了。

把缺失的 index.php 文件補(bǔ)上

這個(gè)需要用到 Nginx 的 rewrite 指令,它的作用是將請(qǐng)求的 URI 替換成目標(biāo) URL。在這里需要達(dá)到的效果是,將

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

替換成

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

當(dāng)然,并不是所有的 URI 都會(huì)進(jìn)行此規(guī)則的重寫(xiě),只有那些不是文件的 URI 才進(jìn)行重寫(xiě)。所以,關(guān)于重寫(xiě)的指令將會(huì)類(lèi)似下面的:

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

通過(guò)以上配置就能達(dá)到補(bǔ)全 index.php 入口文件的效果了。

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

在通用的 URL 中,符號(hào)“?”是具有特殊作用的,它是用來(lái)將查詢字符串和前面的文件隔開(kāi)。在 pathinfo 模式的 URL 中,符號(hào)“?”沒(méi)有了,也就是說(shuō),服務(wù)器無(wú)法區(qū)分 URI 中哪些是文件,哪些是查詢字符串了。所以,我們的目的是將 pathinfo 模式中本來(lái)應(yīng)該由符號(hào)“?”區(qū)分的內(nèi)容給手動(dòng)區(qū)分開(kāi)來(lái)。

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

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

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

一個(gè)簡(jiǎn)單的例子

通過(guò)上面兩部份的配置,現(xiàn)在的 Nginx 服務(wù)器已經(jīng)支持 pathinfo 模式的 URL 了,以下是一個(gè)簡(jiǎn)單的 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;
    }
}

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://m.specialneedsforspecialkids.com/yun/40568.html

相關(guān)文章

  • Nginx 實(shí)現(xiàn) pathinfo 模式

    摘要:現(xiàn)在要做的就是在接收的模式的請(qǐng)求時(shí),將它還原成標(biāo)準(zhǔn)的模式,這樣服務(wù)器就能正常處理了。還好,中有個(gè)指令可以實(shí)現(xiàn)我們的目的,。 使用過(guò) ThinkPHP 框架開(kāi)發(fā)應(yīng)用的同學(xué)應(yīng)該都會(huì)知道,它有一種 URL 模式是 pathinfo,看起來(lái)類(lèi)似下面的 URL: http://example.com/module/controller/action/key1/value1/key2/value2...

    shixinzhang 評(píng)論0 收藏0
  • Nginx 配置 PathInfo 模式

    摘要:客戶端允許上傳的最大文件大小不然會(huì)出現(xiàn)錯(cuò)誤監(jiān)聽(tīng)端口如果不設(shè)置這個(gè),則會(huì)監(jiān)聽(tīng)所有的端口,非一定是下的端口。這個(gè)可以把去掉就是的形式是否允許訪問(wèn)目錄轉(zhuǎn)發(fā)端口這邊要求必須有兩個(gè)捕獲組下面這個(gè)要求替換成,否則會(huì)出現(xiàn)錯(cuò)誤 http { # 客戶端允許上傳的最大文件大小...!不然會(huì)出現(xiàn) http 413 錯(cuò)誤 client_max_body_size 1000M; ...

    xialong 評(píng)論0 收藏0
  • Nginx 配置 PathInfo 模式

    摘要:客戶端允許上傳的最大文件大小不然會(huì)出現(xiàn)錯(cuò)誤監(jiān)聽(tīng)端口如果不設(shè)置這個(gè),則會(huì)監(jiān)聽(tīng)所有的端口,非一定是下的端口。這個(gè)可以把去掉就是的形式是否允許訪問(wèn)目錄轉(zhuǎn)發(fā)端口這邊要求必須有兩個(gè)捕獲組下面這個(gè)要求替換成,否則會(huì)出現(xiàn)錯(cuò)誤 http { # 客戶端允許上傳的最大文件大小...!不然會(huì)出現(xiàn) http 413 錯(cuò)誤 client_max_body_size 1000M; ...

    evin2016 評(píng)論0 收藏0
  • nginx下thinkphp的URL重定向

    摘要:最近使用框架進(jìn)行開(kāi)發(fā)的時(shí)候遇到一個(gè)問(wèn)題,把項(xiàng)目部署到上用當(dāng)服務(wù)器的情況下,重定向出現(xiàn)問(wèn)題,同樣的后綴,在本地環(huán)境可以正常訪問(wèn),在服務(wù)器上就出現(xiàn)了,但是使用的全路徑是可以訪問(wèn)的。 最近使用thinkPHP框架進(jìn)行開(kāi)發(fā)的時(shí)候遇到一個(gè)問(wèn)題,把項(xiàng)目部署到Linux上用nginx當(dāng)服務(wù)器的情況下,URL重定向出現(xiàn)問(wèn)題,同樣的URL后綴,在本地環(huán)境可以正常訪問(wèn),在服務(wù)器上就出現(xiàn)了404 ,但是使用...

    Zack 評(píng)論0 收藏0
  • nginx下thinkphp的URL重定向

    摘要:最近使用框架進(jìn)行開(kāi)發(fā)的時(shí)候遇到一個(gè)問(wèn)題,把項(xiàng)目部署到上用當(dāng)服務(wù)器的情況下,重定向出現(xiàn)問(wèn)題,同樣的后綴,在本地環(huán)境可以正常訪問(wèn),在服務(wù)器上就出現(xiàn)了,但是使用的全路徑是可以訪問(wèn)的。 最近使用thinkPHP框架進(jìn)行開(kāi)發(fā)的時(shí)候遇到一個(gè)問(wèn)題,把項(xiàng)目部署到Linux上用nginx當(dāng)服務(wù)器的情況下,URL重定向出現(xiàn)問(wèn)題,同樣的URL后綴,在本地環(huán)境可以正常訪問(wèn),在服務(wù)器上就出現(xiàn)了404 ,但是使用...

    avwu 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

econi

|高級(jí)講師

TA的文章

閱讀更多
最新活動(dòng)
閱讀需要支付1元查看
<