redirect()在URI段之前添加问号

时间:2011-07-13 14:52:35

标签: php codeigniter

我最近在CodeIgniter的配置中启用了enable_query_strings,因为当我尝试重定向到类似redirect('/blog?foo=bar')的内容时,它会移除GET参数,但enable_query_strings修复了这个...

问题在于我现在做的事情:

redirect('/blog');

它会在网址?

中添加http://www.domain.com/?/blog

如何解决这个问题?或者如何在不启用query_strings的情况下解决主要问题?

4 个答案:

答案 0 :(得分:5)

我建议您只使用header('location:/blog?foo=bar');

答案 1 :(得分: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。

所以,如果你确定这就是你想要的,Karl's answer(使用vanilla php的header重定向)几乎是你唯一的希望。或者,您可以尝试提供完整的网址,因为base_url()现在可能已被破坏(?):

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

但这可能不起作用......

答案 2 :(得分:2)

希望这会对你有所帮助!无需更改htaccess,只需更改代码即可。

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

答案 3 :(得分: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