CodeIgniter URL?
在默認情況下,CodeIgniter 中的 URL 被設計成對搜索引擎和用戶友好的樣式。 不同于使用傳統的在動態系統中使用代詞的標準 “查詢字符串” 的方式,CodeIgniter 使用基于段的方法:
example.com/news/article/my_article
URI 分段?
如果遵循模型-視圖-控制器模式,那么 URI 中的每一段通常表示下面的含義:
example.com/class/method/ID
- 第一段表示要調用的控制器 類 ;
- 第二段表示要調用的類中的 函數 或 方法 ;
- 第三段以及后面的段代表傳給控制器的參數,如 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 文件中。