我最近在CodeIgniter的配置中启用了enable_query_strings
,因为当我尝试重定向到类似redirect('/blog?foo=bar')
的内容时,它会移除GET参数,但enable_query_strings
修复了这个...
问题在于我现在做的事情:
redirect('/blog');
它会在网址?
http://www.domain.com/?/blog
如何解决这个问题?或者如何在不启用query_strings
的情况下解决主要问题?
答案 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)
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