CodeIgniter URL?
在默認(rèn)情況下,CodeIgniter 中的 URL 被設(shè)計(jì)成對(duì)搜索引擎和用戶友好的樣式。 不同于使用傳統(tǒng)的在動(dòng)態(tài)系統(tǒng)中使用代詞的標(biāo)準(zhǔn) “查詢字符串” 的方式,CodeIgniter 使用基于段的方法:
example.com/news/article/my_article
URI 分段?
如果遵循模型-視圖-控制器模式,那么 URI 中的每一段通常表示下面的含義:
example.com/class/method/ID
- 第一段表示要調(diào)用的控制器 類 ;
- 第二段表示要調(diào)用的類中的 函數(shù) 或 方法 ;
- 第三段以及后面的段代表傳給控制器的參數(shù),如 ID 或其他任何變量;
URI 類 和 URL 輔助函數(shù) 包含了一些函數(shù)可以讓你更容易的處理 URI 數(shù)據(jù)。此外,可以通過 URI 路由 的方式進(jìn)行重定向你的 URL 從而使得程序更加靈活。
移除 index.php 文件?
默認(rèn)情況,你的 URL 中會(huì)包含 index.php 文件:
example.com/index.php/news/article/my_article
如果你的服務(wù)器支持重寫 URL ,那么通過 URL 重寫,我們可以輕易的去除這個(gè)文件。在不同的服務(wù)器中,處理方式各異,故而如下我們主要展示兩個(gè)最為通用的 Web 服務(wù)器。
Apache服務(wù)器?
Apache需要開啟 mod_rewrite 擴(kuò)展。當(dāng)開啟時(shí),我們可以使用一個(gè) .htaccess
文件以及一些簡單的規(guī)則來實(shí)現(xiàn) URL 重寫。如下為這個(gè)文件的一個(gè)樣例,其中使用了”否定“方法來排除某些不需要重定向的項(xiàng)目:
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php/$1 [L]
在上面的例子中,除已存在的目錄和文件外,其他的 HTTP 請(qǐng)求都會(huì)經(jīng)過你的 index.php 文件。
注解
這些規(guī)則并不是對(duì)所有服務(wù)器配置都有效。
注解
確保使用上面的規(guī)則時(shí),排除掉那些你希望能直接訪問到的資源。
NGINX?
在NGINX中,我們可以定義一個(gè) location 塊并用 try_files
導(dǎo)向來取得如上文中 Apache 配置一樣的效果:
location / {
try_files $uri $uri/ /index.php/$args;
}
服務(wù)器將會(huì)首先尋找符合對(duì)應(yīng) URI 的文件或目錄(對(duì)于每個(gè)文件,通過根目錄和別名目錄來構(gòu)建其完整的路徑),然后再將其他的請(qǐng)求發(fā)送至 index.php 文件中。