2013-07-11 403 views
0

我是相當新的CI和一直在嘗試如何產生乾淨的URL。我之前已經完成了這個任務,而沒有使用框架編輯我的.htaccess文件,如下所示。漂亮的URL與CodeIgniter

RewriteCond %{REQUEST_URI} !^/(css|js|img)/ 
RewriteRule ^profile/([^/]*)$ profile.php?id=$1 [L] 

隨着CI,我曾嘗試以下:

#Get rid of the index.php that's in the URL by default 
RewriteEngine On 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule ^(.*)$ index.php/$1 [L] 

# Profile page 
RewriteCond %{REQUEST_URI} !^/(css|js|img)/ 
RewriteRule ^profile/([^/]*)$ profile?id=$1 [L] 

我知道,在默認情況下,在URL中的控制器的名稱後的值(在這種情況下,個人資料控制器),將在控制器類中調用具有相同名稱的函數。但是,如果在控制器之後指定的URL中沒有值,默認情況下將調用索引函數。我打算將函數名稱留空,以便默認調用索引函數。但是,重寫規則不起作用。

任何想法?

+0

只需使用CI的路由來處理配置文件URL結構。 –

回答

1

隨着.htaccess你可以像這樣

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

# Profile page 
RewriteCond %{REQUEST_URI} !^/(css|js|img)/ 
RewriteRule ^profile/([^/]*)$ profile/index/$1 [L] 

在重寫就不得不提到的函數名無論是指數函數或任何其他

你一樣可以利用CI路由routes.php

$route['profile/(:any)'] = "profile/index/$1"; 

現在在配置文件的索引功能,你可以得到參數

function index($id) { 
echo $id; 
echo $this->uri->segment(3); 
//Both will result the same 
} 
+0

這很好。但是,當我試圖通過使用$ route ['users /(:num)/(:num)'] =「users/index/$ 1/$ 2」添加第二個變量來擴展這一點時;在routes.php文件中,當URL中缺少第二個變量時它不起作用。 $ 2變量是可選的。它不必在那裏。但是,如果它在URL中,它應該可以工作。 – Lance

+0

因此,首先用單個參數重寫routes.php中的兩個路由,然後再寫入其他 –

+0

謝謝!工作得很好! – Lance