【小(xiǎo)編推薦】ThinkPHP3.2——URLε™"←模式

2014-06-26   ↓✔|   發布者:梁國(guó)芳♠Ω&'   | &≤$nbsp; 查看(kàn):3320次

Thinkphp

入口文(wén)件(jiàn)是(shì)應用(yòng)的(de)單一(y↔α∏γī)入口,對(duì)應用(yòng)的(de)所有(≠∞≥$yǒu)請(qǐng)求都(dōu)定向到(dào)應用(yò≥×ng)入口文(wén)件(jiàn),系統會(huì)從(cóng♣​✔×)URL參數(shù)中解析當前請(qǐng)求的(de)αλ♠模塊、控制(zhì)器(qì)和(hé)操作(zu  ≈ò):

  1. http://serverName/index.php/模塊/控★♠↕制(zhì)器(qì)/操作(zuò)

這(zhè)是(shì)3.2版本的(de)标準URL格式。

可(kě)以通(tōng)過設置模塊綁定或者域名部署等±↑方式簡化(huà)URL地(dì)址中的(de)模塊∞Ω↑→及控制(zhì)器(qì)名稱。

URL大(dà)小(xiǎo)寫

ThinkPHP框架的(de)URL是(shì)區(q​®&ū)分(fēn)大(dà)小(xiǎo)寫(主要(yào)是(shì)®$‍£針對(duì)模塊、控制(zhì)器(q♣≈™ì)和(hé)操作(zuò)名,不(bù)♣‍±☆包括應用(yòng)參數(shù))的(d™'≠e),這(zhè)一(yī)點非常關鍵,因為(wè≤∑∑§i)ThinkPHP的(de)命名規 範是(¥™shì)采用(yòng)駝峰法(首字母大(dà)寫¶✔β↑)的(de)規則,而URL中的(de)模塊和₩♥¥(hé)控制(zhì)器(qì)都(dōu)是πΩ↔(shì)對(duì)應的(de)文(wé×₽n)件(jiàn),因此在Linux環境下(xià)面必然存在區(qū)☆‌∞₩分(fēn)大(dà)小(xiǎo)寫的(de)問(wèn)題。

框架內(nèi)置了(le)一(yī)個(gè)配置參數(shù)用✘≤β§(yòng)于解決URL大(dà)小(xiǎo)寫的(de)問(wèn)題,如✘λ₩α(rú)下(xià):

  1. 'URL_CASE_INSENSITIVE' => true,

URL_CASE_INSENSITIVE設置為(wèi)true的(de)時(shí)候表β★>'示URL地(dì)址不(bù)區(qū)分(fēn)大(dà)小(xi€$♥Ωǎo)寫,這(zhè)個(gè)也(yě)是(shìφ₹)框架在部署模式下(xià)面的(de)默認設置。

當開(kāi)啓調試模式的(de)情況下(xià),這(zh↑>±è)個(gè)參數(shù)是(shì)✔↕£¶false,因此你(nǐ)會(huì)發現(xiàn)在調 σ¶≠試模式下(xià)面URL區(qū)分(fē♦✔n)大(dà)小(xiǎo)寫的(de)情況。

URL模式

如(rú)果我們直接訪問(wèn)入口文(wén)件(jiàn)的(de)話↔×(huà),由于URL中沒有(yǒu)模塊、控制(zhì)器(qì)和(hé'₹×∑)操作(zuò),因此系統會(huì)訪問(wèn)默認模塊(Home)下(x↓≤ià)面的(de)默認控制(zhì)器(↕δ<£qì)(Index)的(de)默認操作(zuò)(index),因÷¥'此下(xià)面的(de)訪問(wèn)是(Ω ε₩shì)等效的(de):

  1. http://serverName/index.php
  2. http://serverName/index.php/Home/Ind☆→ex/index

這(zhè)種URL模式就(jiù)是(shì)系統默認的(de)P>&•↓ATHINFO模式,不(bù)同的(de)URL模式獲取₹ 模塊和(hé)操作(zuò)的(de)方法不(bù)同,ThinkPHPγ‌δ支持的(de)URL模式有(yǒu)四種:普通(tōng)模式、PATHINFO、REWRITE  ¶↔和(hé)兼容模式,可(kě)以設置URL_MODEL參數(shù)改變URL模式。

URL模式 URL_MODEL設置
普通(tōng)模式 0
PATHINFO模式 1
REWRITE模式 2
兼容模式 3

如(rú)果你(nǐ)整個(gè)應用(yòng)下♣>(xià)面的(de)模塊都(dōu)是(shì)采用(₹§§¶yòng)統一(yī)的(de)URL模式,就(j'± iù)可(kě)以在應用(yòng)配置文(wén₩φ<α)件(jiàn)中設置URL模式,如(rú∞φ )果不(bù)同的(de)模塊需要(yào)∞γ設置不(bù)同的(de)URL模式,則可(kě)以在模塊配置文(w£¶én)件(jiàn)中設置。

普通(tōng)模式

普通(tōng)模式也(yě)就(jiù)是(shì)傳統的(de)•‌>φGET傳參方式來(lái)指定當前訪問(wèn)的(de₩§↔)模塊和(hé)操作(zuò),例如(rú): http://localhost/?m=home&¥Ω★;c=user&a=login&var=value

m參數(shù)表示模塊,c參數(shù)表示控₩  制(zhì)器(qì),a參數(shù)表示操作(zuò)(當然這(zh∏₩è)些(xiē)參數(shù)都(dōu)是(shì)可>☆(kě)以配置的(de)),後面的(de)表示其他(tā÷≠∏↔)GET參數(shù)。

如(rú)果默認的(de)變量設置和(hé)你(nǐ)的(de)應< 用(yòng)變量有(yǒu)沖突的(de)話(huà)÷₹,你(nǐ)需要(yào)重新設置系統配置,₩•例如(rú)改成下(xià)面的(de):

  1. 'VAR_MODULE' => 'module', // 默認模塊獲取變量
  2. 'VAR_CONTROLLER' => 'controller', // 默認控制(zhì)器(qì)獲取變量
  3. 'VAR_ACTION' => 'action', // 默認操作(zuò)獲取變量

上(shàng)面的(de)訪問(wèn♠δ •)地(dì)址則變成: http://localhost/?mo ε™dule=home&controller=us±">"er&action=login&var=val↑•"ue

注意,VAR_MODULE隻能(néng)在應用(yòng)配置文(wén)件≥ λ(jiàn)中設置,其他(tā)參數(s'φhù)可(kě)以則也(yě)可(kě)以在模塊 ₹↑配置中設置

PATHINFO模式

PATHINFO模式是(shì)系統的(de)默認URL模式,提供了(le)最好(hǎo)  的(de)SEO支持,系統內(nèi)部已經做(zuò)了≠&₹♠(le)環境的(de)兼容處理(lǐ),所∏→Ω✔以能(néng)夠支持大(dà)多(duō)數(shù)φ↑& 的(de)主機(jī)環境。對(duì)應上(shàng)面↕‌的(de)URL模式,PATHINFO模式下( ↕₽xià)面的(de)URL訪問(wèn)地→φ(dì)址是(shì): http://localhost/index.php/home/user/≈₩login/var/value/

PATHINFO地(dì)址的(de)前三個(g®&$è)參數(shù)分(fēn)别表示模塊/控制(z≠€♠hì)器(qì)/操作(zuò)。

不(bù)過,PATHINFO模式下(xià<∏∞)面,依然可(kě)以采用(yòng)普通 ε©(tōng)URL模式的(de)參數(shù)方式,例如(rú): http://localhost/index.php/home/u♦÷♥ser/login?var=value 依然是(shì)有(yǒu)效的(de)

PATHINFO模式下(xià)面,UR‌×L是(shì)可(kě)定制(zhì)的(de),例如(rú)λ±®£,通(tōng)過下(xià)面的(de✘✘γ)配置:

  1. // 更改PATHINFO參數(shù)分(fēn)隔符
  2. 'URL_PATHINFO_DEPR'=>'-',

我們還(hái)可(kě)以支持下(xià)面的(de)URL訪問(w$→♣₽èn): http://localhost/index.php/homeΩ‍-user-login-var-value

REWRITE模式

REWRITE模式是(shì)在PATHINFO模式的(de)基礎上(shàng)添加了α' (le)重寫規則的(de)支持,可(kě)以去(qù)掉URL地(dì♣•)址裡(lǐ)面的(de)入口文(wén)件 ✘(jiàn)index.php,但(dàn)是(shì)需要(yào)額外(w'π₹≤ài)配置WEB服務器(qì)的(de)重寫規則。±♥

如(rú)果是(shì)Apache則需要(yào)在入口文(wén)件₹"Ω(jiàn)的(de)同級添加.htaccδλ•ess文(wén)件(jiàn),內(nèi)容如(rú)下(& ∏£xià):

  1. <IfModule mod_rewrite.c>
  2. RewriteEngine on
  3. RewriteCond %{REQUEST_FILENAME→♠>✘} !-d
  4. RewriteCond %{REQUEST_FILENAM€∑E} !-f
  5. RewriteRule ^(.*)$ index.php/γ​✔↔$1 [QSA,PT,L]
  6. </IfModule>

接下(xià)來(lái),就(jiù)&♣可(kě)以用(yòng)下(xià)面的(de)URL地(dì)址訪問<>(wèn)了(le): http://localhost/home/user/lσ₹ΩΩogin/var/value

更多(duō)環境的(de)URL重寫支持參考部×✔署部分(fēn)的(de)URL重寫。

兼容模式

兼容模式是(shì)用(yòng)于不(bù)支持PATHINFO的(d¥™≤e)特殊環境,URL地(dì)址是(shì): http://localhost/?s=/ho★ε>βme/user/login/var/value

可(kě)以更改兼容模式變量的(de)名稱定義,例如(rú):

  1. 'VAR_PATHINFO' => 'pathinfo'

PATHINFO參數(shù)分(fēn)隔符對(duì)兼容模式依然有(→↓yǒu)效,例如(rú):

  1. // 更改PATHINFO參數(shù)分(fēn)隔符
  2. 'URL_PATHINFO_DEPR'=>'-',

使用(yòng)以上(shàng)配置的 ≤✘‌(de)話(huà),URL訪問(wèn)地(dì)址可(kě)以變成:≤≈® http://localhost/?s=/home-user↕≠-login-var-value

兼容模式配合Web服務器(qì)重寫規則§↑的(de)定義,可(kě)以達到(dào)和(hé)REWR>↑♦ITE模式一(yī)樣的(de)URL效果。

例如(rú),我們在Apache下(xià)•↕φ≥面的(de)話(huà),.htaccess文(wén)件(§ jiàn)改成如(rú)下(xià)內(nèi)容:

  1. <IfModule mod_rewrite.c>
  2. RewriteEngine on
  3. RewriteCond %{REQUEST_FILENAME}£♣♠¶ !-d
  4. RewriteCond %{REQUEST_FILENAME} !-×£f
  5. RewriteRule ^(.*)$ index.php?∑≥↓ s=/$1 [QSA,PT,L]
  6. </IfModule>

就(jiù)可(kě)以和(hé)REWRITE模式一(yī)樣訪問(w∑♥♦èn)下(xià)面的(de)URL地(dì)址訪問(wèn‍ε)了(le): http://localhost/home/user/login/v§₽ar/value