CodeIgniter 使用手冊版本 2.2.0


CodeIgniter URLs

CodeIgniter 設計的 URLs 對搜尋引擎及人工閱讀是友善的。相較於使用傳統的查詢字串(query string)的方法,CodeIgniter 則使用的是分段式(segment-based)的方法:

example.com/news/article/my_article

注意: 傳統 Query string URLs 的方式可以參考底下的說明,還是可以依需求選擇性的啟動。

分段式 URI

分段式的 URL 遵循模型-檢視-控制器(MVC)模式,通常呈現如下:

example.com/class/function/ID
  1. 第一段代表的是控制器(controller)啟動的類別(class)
  2. 第二段代表的是類別(class)的 函數(function) 或者是 method 被呼叫使用。
  3. 第三段之後,代表的是 ID 或是任何變數準備要傳遞給控制器(controller)所使用。

URI 類別 以及 URL 補助函數 兩者裡頭有 些函數可以讓你輕鬆的處理 URI 資料,除此之外,你的 URLs 可以用 URI Routing 對映(remap)的功能,使用上將會更有彈性。

移除 index.php 檔案

index.php 這個檔案通常包含在你的 URLs 裡頭:

example.com/index.php/news/article/my_article

你可以輕鬆的把 index.php 用 .htaccess 移除,只消對 index.php 設定些簡單的規則。請參考底下的範例。使用 negative 方式把全部都導向,除了某些制定的項目:

RewriteEngine on
RewriteBase /
RewriteCond $1 !^(index\.php|images|robots\.txt|$)
RewriteRule ^(.*)$ index.php/$1 [L,QSA]

在上述的範例中,像是 index.php、images、robots.txt 的全部 HTTP request 都會被當成是 request index.php 檔案。

假設是使用 Nginx 伺服器,請參考底下設定

location / {
  try_files $uri $uri/ /index.php;
}

location ~ \.php$ {
  fastcgi_pass unix:/var/run/php5-fpm.sock;
  fastcgi_index index.php;
  fastcgi_split_path_info ^(.+\.php)(.*)$;
  include fastcgi_params;
  fastcgi_param HTTPS off;
  fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
}

加入 URL 後置字串

config/config.php 檔案可以設定後置字串,讓所有的由 CodeIgniter 產生的 URLs 都附戴上去。舉例來說,假如某個 URL 如下:

example.com/index.php/products/view/shoes

你可以依照需求增加後置字串,像加上 .html 讓你的網址看起來像底下的型式:

example.com/index.php/products/view/shoes.html

啟動 Query Strings

某些時候,你也許想要使用 query strings URLs:

index.php?c=products&m=view&id=345

CodeIgniter 也有提供這個功能,可以到 application/config.php 檔案中開啟底下的設定:

$config['enable_query_strings'] = FALSE;
$config['controller_trigger'] = 'c';
$config['function_trigger'] = 'm';

只要把 "enable_query_strings" 設定為 TRUE,這個功能就會啟動。

index.php?c=controller&m=method

請注意: 如果你堅持要使用 query strings 而不使用 URL 補助函數的話,你就必須要建立自己的 URLs。因為當初我們 進行設計某些補助函數的時候,就是採用分段式的 URLs,像是些會自建 URLs 的補助函數以及 form 補助函數 都是使用分段式的 URLs 設計。