在使用 CodeIgniter 進行網站開發時,我們會發現許多網址的 URL 前面都帶有 index.php。這是因為 CodeIgniter 的默認路由規則需要使用 index.php 來定義基本的 URL 訪問方式。
舉個例子,假設我們有一個名為 mysite 的網站,網址為 http://www.example.com/mysite。如果我們想訪問 mysite 下的頁面,如 home 頁面,我們就需要在 URL 后面加上 index.php,并加上控制器及其方法的名稱,如 http://www.example.com/mysite/index.php/home。
<?php class Home extends CI_Controller { public function index() { echo '歡迎光臨我們的網站!'; } } ?>
可以看到,這里定義了 Home 類繼承了 CodeIgniter 的 CI_Controller,然后又定義了其方法 index,這個方法會輸出一段歡迎信息。現在我們就可以通過上面的 URL 訪問到這個方法了。
但是,如果我們希望 URL 不使用 index.php,該怎么辦呢?CodeIgniter 其實提供了兩種方法來解決這個問題。
第一種方法是通過修改 CodeIgniter 的配置文件來更改路由規則。我們可以在 application/config/config.php 文件中找到以下代碼:
$config['index_page'] = 'index.php';
我們可以將其改為:
$config['index_page'] = '';
這樣在 URL 后面就不需要加上 index.php 了。但是在這種情況下,我們的服務器必須支持 mod_rewrite 模塊,否則程序將不能正常運行。
第二種方法則是更改服務器的配置文件(如 .htaccess 文件)。我們可以在應用程序根目錄下創建一個新文件來實現。例如,如果我們使用的是 Apache 服務器,我們可以像下面這樣編輯一個新的 .htaccess 文件:
<IfModule mod_rewrite.c> RewriteEngine On RewriteBase /mysite/ RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule ^(.*)$ index.php/$1 [L] </IfModule>
這里使用了 mod_rewrite 模塊,并重寫了 URL 規則,刪除了 URL 中的 index.php,只剩下我們需要的地址。
此外,還有一些情況下我們需要在 URL 中添加其他參數。這時我們可以使用 CodeIgniter 的 URL Helper。例如,如果我們想向頁面傳遞數據,我們可以在 URL 中添加一個參數:
<a href="<?php echo site_url('home/show/100'); ?>">查看 ID 為 100 的頁面</a>
這里使用了 site_url 方法,其作用是生成完整的 URL。在 Home 控制器中,我們需要定義一個 show 方法,該方法接收一個參數:
<?php class Home extends CI_Controller { public function show($id) { echo '你正在查看 ID 為 ' . $id . ' 的頁面'; } } ?>
這樣我們就可以通過 http://www.example.com/mysite/home/show/100 訪問到這個方法并傳遞參數了。
總的來說,CodeIgniter 的路由規則是很靈活的。我們可以通過更改配置文件或服務器文件來修改 URL,也可以使用 URL Helper 來生成帶有參數的 URL。當然,我們也可以自定義路由規則來適應更復雜的場景。