2012-03-29 61 views
0

在過去,我通過爲每個控制器創建新規則來解決這個問題。 所以我們走吧; 默認情況下,url如下所示;CodeIgniter .htaccess/Mod_rewrite

http://www.url.com/index.php/controller/method/parameters 

我想改變它;

http://www.url.com/controller/method/parameter1/parameter2/parameter3/etc... 

我的問題是參數部分,因爲我有時有3個或4個參數,但有時沒有或只有一個。

現在我有這個(這是不行的,不然我也不會發布):

RewriteEngine On 

RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 

RewriteRule ^(.*)$ index.php/$1 [L,QSA] 

如果我要求只是它的工作原理控制器(因爲索引()方法是存在),但自定義方法和參數不起作用。

然後,我還必須添加路由到config/routes.php嗎? 在過去,我通過爲每個使用的組合添加自定義路線和規則來解決此問題。

我googled的天,沒有成功。請告訴我,如果我錯過了一個帖子。

在此先感謝。

回答

1
RewriteRule ^(.*)$ index.php?$1 [L] 

這確實爲我的伎倆,在配置文件中使用$config['uri_protocol'] = 'REQUEST_URI';(注意不是/?)。

+0

你還添加路線嗎?我似乎通過只有該規則併爲每個控制器/方法/參數分別添加路由來實現它。 – Roel 2012-03-29 17:01:05

+0

是的,我確實如':$ route ['controller /(:num)/(:any)'] =「controller/index/$ 1/$ 2」;其中(:num)是映射到數據庫的整數(id) )是指一個slu。。 – Mudshark 2012-03-29 17:14:06

+0

另請注意:具有除「index」以外的控制器方法的URL不需要使用此方案的自定義路由,例如, 'example.com/controller/view/1/abc-de'可以在不需要自定義路由的情況下正常工作。然後,我將通過'$ this-> uri-> segment(3)'和'$ this-> uri-> segment(4)' – Mudshark 2012-03-29 18:02:43

1

最好的辦法是改變你的URL結構,這將需要配置量最少的:

使用結構像http://www.url.com/controller/method/param1_key/param1_value/param2_key/param2_value/etc...

然後,您可以使用$this->uri->uri_to_assoc()拿到鑰匙=> value對在一個關聯數組中。

在這裏看到的文檔:http://codeigniter.com/user_guide/libraries/uri.html