CodeIgniter URLs

在預設情況下,URLs 在 CodeIgniter 是被設計對搜尋引擎以及人類閱讀友善的方式。而不是用標準的 “query string” 的 URLs 同義動態系統,CodeIgniter 使用 (分段式) segment-based 像是:

example.com/news/article/my_article

Note

Query string URLs 是可以被啟動的,在下面會再敘述。

URI 區段

區段在 URL 中,是通過 Model-View-Controller 架構來完成,常常表示方式如下:

example.com/class/function/ID
  1. 第一個區段被調用的是控制器 class
  2. 第二個區段代表被稱為類別 function 或者方法。
  3. 第三個區段,以及所有額外的區段,代表ID以及所有以及後面的變數,它會傳送到 controller 裡面。

URI Library 以及 URL Helper 包含了功能,可以很容易的使用 URI 資料。除此之外,你的 URLs 可以更彈性的被重映射 使用 URI Routing 功能。

移除掉 index.php 檔案

在預設情況下 index.php 檔案會被包好到你的 URLs:

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

如果你的 Apache server 有啟動 mod_rewrite ,你可以很簡單的移除掉這個字串,使用簡單的規則通過修改 .htaccess 即可達成。這裡有簡單的範例檔案,使用”原生“方法,來重導向所有請求,除了指定的項目之外:

.. code-block:: console
RewriteEngine On RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule ^(.*)$ index.php/$1 [L]

在上述的例子中,所有的 HTTP request 除了現有的資料夾以及現有的檔案,其他請求會被視為通過你的 index.php 去請求。 比方說如果你的專案在 http://localhost/CI/index.php 如果放在 CI 這個目錄下,您有個 images 資料夾、以及 index.php 還有 robots.txt 這三個東西必須公開存取的,那麼你可以這樣做:

.. code-block:: console
RewriteEngine on RewriteBase /CI RewriteCond $1 !^(index.php|images|robots.txt|$) RewriteRule ^(.*)$ index.php/$1 [L,QSA]

公開存取的檔案或資料夾,在 RewriteCond 中可以通過 | 來分隔公開存取的檔案或資料夾,如果專案是在 http://localhost 底下,那麼 RewriteBase 後面接 / 即可。

假設是使用 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;
}

Note

這些具體的規則可能並不適用於所有 Server 配置工作。

Note

請務必遵從上面的規則,你可能需要從公開訪問的任何檔案或資料夾排除。

增加 URL 後綴

在你的 config/config.php 檔案裡,你可以指定一個後綴來加入到所有的 URLs 產生中,通過 CodeIgniter。以下例子,如果你的 URL 是:

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

通過修改參數 $config[‘url_suffix’] 你可以增加一個後綴,像是 .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 這個功能就會被啟動。 你的 controllers 和 functions 將會被通過 “觸發” 字串來存取,你所設定的調用 controllers 以及 methods:

index.php?c=controller&m=method

Note

如果你使用 query strings 你將必須建立你自己的 URLs,而不能用 URL 輔助函式(以及其它輔助函式像是 form輔助函式 來產生 URLs)因為這些設計有基於分段 URL 工作的。