ThinkPHP URL模式和URL重寫

2022-03-03 15:49:44 字數 3045 閱讀 9356

現在用的版本是tp3.1.3,這兩天總是遇到notfound的錯誤,解析路徑錯誤,所以認真研究了一下手冊,發現問題出在url模式上面。

url模式

一般是使用u方法來生成路徑,u方法的定義規則如下(方括號內引數根據實際應用決定):

u('[分組/模組/操作]?引數' [,'引數','偽靜態字尾','是否跳轉','顯示網域名稱'])

如果不定義專案和模組的話 就表示當前專案和模組名稱,下面是一些簡單的例子:

u('user/add') // 生成user模組的add操作的url位址

u('blog/read?id=1') // 生成blog模組的read操作 並且id為1的url位址

u('admin/user/select') // 生成admin分組的user模組的select操作的url位址

u方法的第二個引數支援陣列和字串兩種定義方式,如果只是字串方式的引數可以在第乙個引數中定義,例如:

u('blog/cate',array('cate_id'=>1,'status'=>1))

u('blog/cate','cate_id=1&status=1')

u('blog/cate?cate_id=1&status=1')

所以關鍵就在於檢視頁面使用的u方法是用哪種方式來傳遞引數的。不同的傳參方法,對應不同的url_model。相當於使用不同的傳參方法就要設定相對應的解析方式。

而url_model設定在手冊裡寫的很清楚:

一、普通模式:設定url_model 為0

採用傳統的url引數模式

:二、pathinfo模式(預設模式):設定url_model 為1

預設情況使用pathinfo模式,thinkphp內建強大的pathinfo支援,提供靈活和友好url支援。pathinfo模式自動識別模組和操作,例如

http:或者

:在不考慮路由的情況下,第乙個引數會被解析成模組名稱(如果啟用了分組的話,則依次往後遞推),第二個引數會被解析成操作,後面的引數是顯式傳遞的,而且必須成對出現,例如:

:其中引數之間的分割符號由url_pathinfo_depr引數設定,預設為」/」,例如我們設定url_pathinfo_depr為「-」的話,就可以使用下面的url訪問

:注意不要使用」:」 和」&」符號進行分割,該符號有特殊用途。

略加修改,就可以展示出富有詩意的url,呵呵~

如果想要簡化url的形式可以通過路由功能(後面會有描述)以及空模組和空操作。

在path_info模式下面,會把相關引數轉換成get變數,以及併入request變數,因此不妨礙url裡面的get和request變數獲取。

三、rewrite模式: 設定url_model 為2

該url模式和pathinfo模式功能一樣,除了可以不需要在url裡面寫入口檔案,和可以定義.htaccess 檔案外。在開啟了apache的url_rewrite模組後,就可以啟用rewrite模式了,具體參考下面的url重寫部分。 

四、相容模式: 設定url_model 為3

相容模式是普通模式和pathinfo模式的結合,並且可以讓應用在需要的時候直接切換到pathinfo模式而不需要更改模板和程式,還可以和url_write模式整合。相容模式url可以支援任何的執行環境。

相容模式的效果是:

:並且也可以支援引數分割符號的定義,例如在url_pathinfo_depr為~的情況下,下面的url有效:

http:其

實是利用了var_pathinfo引數,用普通模式的實現模擬了pathinfo的模式。但是相容模式並不需要自己傳s變數,而是由系統自動完成url

部分。正是由於這個特性,相容模式可以和pathinfo模式之間直接切換,而不需更改模板檔案裡面的url位址連線。

某些伺服器環境不能良好的支援pathinfo,但是在大多數環境下面thinkphp可以進行相容判斷,如果你的伺服器環境或者空間仍然無法識別pahtinfo的話,或者需要自己增加識別方法或者可以選擇普通模式或者相容模式url執行。

url重寫

這裡第三種模式在**發布的時候時常會用到,為了使url看起來更加清爽,所以需要開啟url_model=2,而這個模式和模式1沒有太大區別,但是需要對apache伺服器進行相應的配置。下面是官方手冊上的介紹:

通常的url裡面含有index.php,為了達到更好的seo效果可能需要去掉url裡面的index.php ,通過url重寫的方式可以達到這種效果,通常需要伺服器開啟url_rewrite模組才能支援。

下面是apache的配置過程,可以參考下:

//--------------------------------------

1、httpd.conf配置檔案中載入了mod_rewrite.so模組

2、allowoverride none 將none改為 all   注意:需要將所有出現的 "allowoverride none" 中的 "none" 都改為 "all" ,不然是不行的

3、確保url_model設定為2

4、把下面的內容儲存為.htaccess檔案放到入口檔案的同級目錄下

mod_rewrite.c

>

rewriteengine on

rewritecond % !-d

rewritecond % !-f

rewriterule ^(.*)$ index.php/$1 [qsa,pt,l]

---------------------------------------//

重啟apache之後,原來的

就可以通過訪問

簡化了url位址。

在一般情況下,**開發的時候可以只使用url_model=1這個模式,如果要使用url路由,則應該配置url_model=2.這部分以後遇到再做研究。

各種U盤啟動模式簡介

1 usb hdd 硬碟 模式,dos啟動後顯示c 盤,hp u盤格式化工具製作的u盤即採用此啟動模式。此模式相容性很高,但對於一些只支援usb zip模式的電腦則無法啟動。2 usb zip 大容量軟盤 模式,dos啟動後顯示a盤,flashboot製作的usb zip啟動u盤即採用此模式。此模式...

Window和Linux系統下獲取U盤UUID

注意 u盤每次格式化後會重新獲得uuid。u盤uuid一般是8位字串。執行以下批處理就可以獲得u盤的uuid echo off for f tokens 2 delims a in wmic logicaldisk where drivetype 2 get volumeserialnumber v...

c語言中u8,u16,u32和int區別

c語言中u8,u16,u32和int區別為符號不同 資料範圍不同 記憶體占用的空間不同。一 符號不同 1 u8 u8表示無符號char字元型別。2 u16 u16表示無符號short短整數型別。3 u32 u32表示無符號int基本整數型別。4 int int表示帶符號int基本整數型別。二 資料範...