2011-07-13 53 views
4

我最近在CodeIgniter的配置啓用enable_query_strings因爲當我試圖重新導向到像redirect('/blog?foo=bar')它消除了GET參數,但enable_query_strings固定的前..重定向()添加一個問號URI段

問題是,現在當我這樣做:

redirect('/blog'); 

它增加了一個?到的網址:http://www.domain.com/?/blog

如何解決呢?或者如何在不啓用query_strings的情況下解決主要問題?

+1

要麼禁用它,要麼禁用它。但不要混用。 '重定向('c = blog')',參見http://codeigniter.com/user_guide/general/urls.html – hakre

回答

5

我只是用header('location:/blog?foo=bar');,而不是建議。

1

你爲什麼使用查詢字符串? CodeIgniters路由器將爲您處理這個問題。您可以創建更短的是你想要的,但基本的結構是這樣的路由器路徑:

http://www.somedomain.com/controller/function/param1/param2/...etc 

所以你可以只去這個:

http://www.somedomain.com/blog/foo/bar 

http://www.somedomain.com/blog/post/3 

你也可以使用路由器配置將其更改爲如下所示:

http://www.somedomain.com/blog/3 

你真的應該使用你的CRUD函數。
http://codeigniter.com/user_guide/general/urls.html
http://codeigniter.com/user_guide/general/routing.html
http://codeigniter.com/user_guide/libraries/uri.html

+0

我知道,有時你不得不使用漂亮的URL。 – Ryan

2

Read up關於enable_query_strings究竟做了什麼,並確保這實際上是你想要的。它實際上是而不是一種簡單啓用$_GET的方法。

令人困惑,我知道。請檢查latest version(當前是2.0.2),並啓用配置選項allow_get_array。這允許對CI的正常$_GET支持。

enable_query_strings是一些奇怪的虛假實驗性功能,由於某種原因在新版本中持續存在(人們是否真的使用它?)。我們都知道,它不是,也從來不是在正常使用中使用$_GET的一種方法。

編輯:看起來像所有的網址助手,並找出你的網址爲你的所有功能,如果你啓用了這個功能。

從用戶手冊上enable_query_strings

請注意:如果您使用的查詢字符串,你將不得不建立 自己的網址,而不是利用URL傭工(和其他 助手生成的URL ,就像一些表單助手),因爲這些 被設計爲與基於段的URL一起工作。

所以,如果你肯定這是你想要的,Karl's answer(使用香草PHP的header重定向)幾乎是你唯一的希望。或者,你可以嘗試提供一個完整的URL,看到base_url()現在可能打破太(?):

redirect('http://full-urls-are-tedious.com/blog'); 

但是,這甚至可能不工作...

2

希望這將幫助你!無需更改htaccess,只需更改您的代碼即可。

redirect(base_url()."controller_name/function_name");