­

[CodeIgniter4]-CodeIgniter URL

CodeIgniter URL

在默認情況下,CodeIgniter 中的 URL 被設計成對搜索引擎和用戶友好的樣式。 不同於使用傳統的在動態系統中使用代詞的標準 「查詢字元串」 的方式,CodeIgniter 使用基於段的方法:

example.com/news/article/my_article

URI 分段

如果遵循模型-視圖-控制器模式,那麼 URI 中的每一段通常表示下面的含義:

example.com/class/method/ID
  1. 第一段表示要調用的控制器  ;
  2. 第二段表示要調用的類中的 函數 或 方法 ;
  3. 第三段以及後面的段代表傳給控制器的參數,如 ID 或其他任何變數;

URI 類 和 URL 輔助函數 包含了一些函數可以讓你更容易的處理 URI 數據。此外,可以通過 URI 路由 的方式進行重定向你的 URL 從而使得程式更加靈活。

移除 index.php 文件

默認情況,你的 URL 中會包含 index.php 文件:

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

如果你的伺服器支援重寫 URL ,那麼通過 URL 重寫,我們可以輕易的去除這個文件。在不同的伺服器中,處理方式各異,故而如下我們主要展示兩個最為通用的Web伺服器。

Apache伺服器

Apache需要開啟 mod_rewrite 擴展。當開啟時,我們可以使用一個 .htaccess 文件以及一些簡單的規則來實現 URL 重寫。如下為這個文件的一個樣例,其中使用了」否定「方法來排除某些不需要重定向的項目:

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

在上面的例子中,除已存在的目錄和文件外,其他的 HTTP 請求都會經過你的 index.php 文件。

註解

這些規則並不是對所有伺服器配置都有效。

註解

確保使用上面的規則時,排除掉那些你希望能直接訪問到的資源。

NGINX

在NGINX中,我們可以定義一個 location 塊並用 try_files 導向來取得如上文中 Apache 配置一樣的效果:

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

伺服器將會首先尋找符合對應 URI 的文件或目錄(對於每個文件,通過根目錄和別名目錄來構建其完整的路徑),然後再將其他的請求發送至 index.php 文件中。