我试图把一个URL,如CI我的URI段的一个值。 我的控制器方法被定义为接受这样的说法。 然而,当我去到URL,我得到一个404错误。 例如:
www.domain.com/foo/urlencoded-url/
任何想法有什么不对? 我应该通过GET做到这一点呢?
更新:
//生成404 URL http://localhost/myapp/profile_manager/confirm_profile_parent_delete/ugpp_533333338/http%3A%2F%2Flocalhost%2Fmyapp%2Fdashboard%2F
//这是我profile_manager
控制器公共职能confirm_profile_parent_delete($ encrypted_user_group_profile_parent_id = '',$ url_current = '')
如果我删除第二个URI segement,我没有得到一个404: http://localhost/myapp/profile_manager/confirm_profile_parent_delete/ugpp_533333338/
通过urlendode()'d在URL段,然后将其与自己的(MY_ *)类解码:
应用/核心/ MY_URI.php:
class MY_URI extends CI_URI { function _filter_uri($str) { return rawurldecode(parent::_filter_uri($str)); } } // EOF
您可能需要更改规则在配置/ route.php接受的URL编码的字符。 您还可以看看一些从下面的文章的解决方案:
- http://codeigniter.com/forums/viewthread/81365/
- http://sholsinger.com/archive/2009/04/passing-email-addresses-in-urls-with-codeigniter/
- 在笨URL段传递URL
事实上,我不得不这样做进行urlencode(用urlencode(用urlencode(
和urldecode(urldecode(urldecode(
3次!! 它终于摸索,两次没剪。
尝试
function __autoload($class){
if(!empty($_SERVER['REQUEST_URI'])){
$_SERVER['REQUEST_URI'] = $_SERVER['REDIRECT_QUERY_STRING'] = $_SERVER['QUERY_STRING'] = $_SERVER['REDIRECT_URL'] = $_SERVER['argv'][0] = urldecode($_SERVER['REQUEST_URI']);
}
}
在config.php对于我这种方法工作
这是很老了,但我想我会分享我的解决方案。
除了接受参数作为URL路径的,接受它作为一个GET变量:
http://localhost/myapp/profile_manager/confirm_profile_parent_delete/ugpp_533333338?url_current=http%3A%2F%2Flocalhost%2Fmyapp%2Fdashboard%2F
在代码:
function confirm_profile_parent_delete($encrypted_user_group_profile_parent_id = '') {
$url_current = $this->input->get('url_current');
...
这似乎工作。