# URL模式
[上一頁](# "上一頁")[下一頁](# "下一頁")
入口文件是應用的單一入口,對應用的所有請求都定向到應用入口文件,系統會從URL參數中解析當前請求的模塊、控制器和操作:
~~~
http://serverName/index.php/模塊/控制器/操作
~~~
這是3.2版本的標準URL格式。
> 可以通過設置模塊綁定或者域名部署等方式簡化URL地址中的模塊及控制器名稱。
### URL大小寫
ThinkPHP框架的URL是區分大小寫(主要是針對模塊、控制器和操作名,不包括應用參數)的,這一點非常關鍵,因為ThinkPHP的命名規范是采用駝峰法(首字母大寫)的規則,而URL中的模塊和控制器都是對應的文件,因此在Linux環境下面必然存在區分大小寫的問題。
框架內置了一個配置參數用于解決URL大小寫的問題,如下:
~~~
'URL_CASE_INSENSITIVE' => true,
~~~
當`URL_CASE_INSENSITIVE`設置為true的時候表示URL地址不區分大小寫,這個也是框架在部署模式下面的默認設置。
> 當開啟調試模式的情況下,這個參數是false,因此你會發現在調試模式下面URL區分大小寫的情況。
### URL模式
如果我們直接訪問入口文件的話,由于URL中沒有模塊、控制器和操作,因此系統會訪問默認模塊(Home)下面的默認控制器(Index)的默認操作(index),因此下面的訪問是等效的:
~~~
http://serverName/index.php
http://serverName/index.php/Home/Index/index
~~~
這種URL模式就是系統默認的PATHINFO模式,不同的URL模式獲取模塊和操作的方法不同,ThinkPHP支持的URL模式有四種:**普通模式、PATHINFO、REWRITE和兼容模式**,可以設置**URL_MODEL**參數改變URL模式。
| URL模式 | URL_MODEL設置 |
|-----|-----|
| 普通模式 | 0 |
| PATHINFO模式 | 1 |
| REWRITE模式 | 2 |
| 兼容模式 | 3 |
> 如果你整個應用下面的模塊都是采用統一的URL模式,就可以在應用配置文件中設置URL模式,如果不同的模塊需要設置不同的URL模式,則可以在模塊配置文件中設置。
### 普通模式
**普通模式**也就是傳統的GET傳參方式來指定當前訪問的模塊和操作,例如:`http://localhost/?m=home&c=user&a=login&var=value`
m參數表示模塊,c參數表示控制器,a參數表示操作(當然這些參數都是可以配置的),后面的表示其他GET參數。
如果默認的變量設置和你的應用變量有沖突的話,你需要重新設置系統配置,例如改成下面的:
~~~
'VAR_MODULE' => 'module', // 默認模塊獲取變量
'VAR_CONTROLLER' => 'controller', // 默認控制器獲取變量
'VAR_ACTION' => 'action', // 默認操作獲取變量
~~~
上面的訪問地址則變成:`http://localhost/?module=home&controller=user&action=login&var=value`
> 注意,VAR_MODULE只能在應用配置文件中設置,其他參數可以則也可以在模塊配置中設置
### PATHINFO模式
**PATHINFO模式**是系統的默認URL模式,提供了最好的SEO支持,系統內部已經做了環境的兼容處理,所以能夠支持大多數的主機環境。對應上面的URL模式,PATHINFO模式下面的URL訪問地址是:`http://localhost/index.php/home/user/login/var/value/`
PATHINFO地址的前三個參數分別表示模塊/控制器/操作。
> 不過,PATHINFO模式下面,依然可以采用普通URL模式的參數方式,例如: `http://localhost/index.php/home/user/login?var=value` 依然是有效的
PATHINFO模式下面,URL是可定制的,例如,通過下面的配置:
~~~
// 更改PATHINFO參數分隔符
'URL_PATHINFO_DEPR'=>'-',
~~~
我們還可以支持下面的URL訪問:`http://localhost/index.php/home-user-login-var-value`
### REWRITE模式
**REWRITE模式**是在PATHINFO模式的基礎上添加了重寫規則的支持,可以去掉URL地址里面的入口文件index.php,但是需要額外配置WEB服務器的重寫規則。
如果是Apache則需要在入口文件的同級添加.htaccess文件,內容如下:
~~~
<IfModule mod_rewrite.c>
RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)$ index.php/$1 [QSA,PT,L]
</IfModule>
~~~
接下來,就可以用下面的URL地址訪問了:`http://localhost/home/user/login/var/value`
> 更多環境的URL重寫支持參考部署部分的URL重寫。
### 兼容模式
**兼容模式**是用于不支持PATHINFO的特殊環境,URL地址是:`http://localhost/?s=/home/user/login/var/value`
可以更改兼容模式變量的名稱定義,例如:
~~~
'VAR_PATHINFO' => 'pathinfo'
~~~
PATHINFO參數分隔符對兼容模式依然有效,例如:
~~~
// 更改PATHINFO參數分隔符
'URL_PATHINFO_DEPR'=>'-',
~~~
使用以上配置的話,URL訪問地址可以變成:`http://localhost/?s=/home-user-login-var-value`
兼容模式配合Web服務器重寫規則的定義,可以達到和REWRITE模式一樣的URL效果。
例如,我們在Apache下面的話,.htaccess文件改成如下內容:
~~~
<IfModule mod_rewrite.c>
RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)$ index.php?s=/$1 [QSA,PT,L]
</IfModule>
~~~
就可以和REWRITE模式一樣訪問下面的URL地址訪問了:`http://localhost/home/user/login/var/value`
[上一頁](# "上一頁")[下一頁](# "下一頁")
- 序言
- 基礎
- 獲取ThinkPHP
- 環境要求
- 目錄結構
- 入口文件
- 自動生成
- 模塊
- 控制器
- 開發規范
- 配置
- 配置格式
- 配置加載
- 讀取配置
- 動態配置
- 擴展配置
- 批量配置
- 架構
- 模塊化設計
- URL模式
- 多層MVC
- CBD模式
- 命名空間
- 自動加載
- 應用模式
- 項目編譯
- 系統流程
- 路由
- 路由定義
- 規則路由
- 正則路由
- 靜態路由
- 閉包支持
- 實例說明
- 控制器
- 控制器定義
- 前置和后置操作
- Action參數綁定
- 偽靜態
- URL大小寫
- URL生成
- AJAX返回
- 跳轉和重定向
- 輸入變量
- 請求類型
- 空操作
- 空控制器
- 操作綁定到類
- 模型
- 模型定義
- 模型實例化
- 字段定義
- 連接數據庫
- 切換數據庫
- 分布式數據庫支持
- 連貫操作
- WHERE
- TABLE
- ALIAS
- DATA
- FIELD
- ORDER
- LIMIT
- PAGE
- GROUP
- HAVING
- JOIN
- UNION
- DISTINCT
- LOCK
- CACHE
- COMMENT
- RELATION
- 命名范圍
- CURD操作
- 數據創建
- 數據寫入
- 數據讀取
- 數據更新
- 數據刪除
- ActiveRecord
- 字段映射
- 查詢語言
- 查詢方式
- 表達式查詢
- 快捷查詢
- 區間查詢
- 組合查詢
- 統計查詢
- SQL查詢
- 動態查詢
- 子查詢
- 自動驗證
- 自動完成
- 參數綁定
- 虛擬模型
- 模型分層
- 視圖模型
- 關聯模型
- 高級模型
- Mongo模型
- 視圖
- 模板定義
- 模板主題
- 模板賦值
- 模板渲染
- 獲取模板地址
- 獲取內容
- 模板引擎
- 模板
- 變量輸出
- 系統變量
- 使用函數
- 默認值輸出
- 使用運算符
- 標簽庫
- 模板繼承
- 修改定界符
- 三元運算
- 包含文件
- 內置標簽
- Volist標簽
- Foreach標簽
- For標簽
- Switch標簽
- 比較標簽
- 范圍判斷標簽
- IF標簽
- Present標簽
- Empty標簽
- Defined標簽
- Assign標簽
- Define標簽
- 標簽嵌套
- import標簽
- 使用PHP代碼
- 原樣輸出
- 模板注釋
- 模板布局
- 模板替換
- 調試
- 調試模式
- 異常處理
- 日志記錄
- 頁面Trace
- Trace方法
- 變量調試
- 性能調試
- 錯誤調試
- 模型調試
- 緩存
- 數據緩存
- 快速緩存
- 查詢緩存
- SQL解析緩存
- 靜態緩存
- 安全
- 輸入過濾
- 表單合法性檢測
- 表單令牌
- 防止SQL注入
- 目錄安全文件
- 保護模板文件
- 上傳安全
- 防止XSS攻擊
- 其他安全建議
- 擴展
- 類庫擴展
- 驅動擴展
- 緩存驅動
- 數據庫驅動
- 日志驅動
- Session驅動
- 存儲驅動
- 模板引擎驅動
- 標簽庫驅動
- 行為擴展
- 標簽擴展
- Widget擴展
- 應用模式
- 部署
- PATH_INFO支持
- URL重寫
- 模塊部署
- 域名部署
- 入口綁定
- 替換入口
- 專題
- SESSION支持
- Cookie支持
- 多語言支持
- 數據分頁
- 文件上傳
- 驗證碼
- 圖像處理
- RESTFul
- RPC
- SAE
- IP獲取和定位
- 附錄
- 常量參考
- 配置參考
- 升級指導
- 更新日志
- 鳴謝
- 關于