CodeIgniter:URI段中的urlencoded URL不起作用

时间:2012-05-16 01:11:23

标签: codeigniter codeigniter-2

我正在尝试将一个URL作为我在CI中的一个URI段的值。我的控制器方法被定义为接受这样的参数。但是,当我转到URL时,我收到404错误。例如:

www.domain.com/foo/urlencoded-url /

任何想法有什么不对?我应该通过GET来做到这一点吗?

更新

//生成404的网址 http://localhost/myapp/profile_manager/confirm_profile_parent_delete/ugpp_533333338/http%3A%2F%2Flocalhost%2Fmyapp%2Fdashboard%2F

//这是在我的profile_manager控制器中 public function confirm_profile_parent_delete($ encrypted_user_group_profile_parent_id ='',$ url_current ='')

如果删除第二个URI段,我就不会得到404:http://localhost/myapp/profile_manager/confirm_profile_parent_delete/ugpp_533333338/

6 个答案:

答案 0 :(得分:3)

似乎%2F打破了apache的事情。

可能的解决方案:

  1. 在发送url之前preg_replace /'s to -'s(或其他),然后在另一端切换回来。
  2. 将apache设置为AllowEncodedSlashes On
  3. 有点黑客攻击,但你甚至可以将网址保存到会话变量或其他内容而不是通过网址发送*耸肩*
  4. 双重网址在发送
  5. 之前对其进行编码

答案 1 :(得分:1)

在段中传递urlendode()&#d; URL,然后使用自己的(MY_ *)类对其进行解码:

应用/核心/ MY_URI.php:

class MY_URI extends CI_URI {

    function _filter_uri($str)
    {
        return rawurldecode(parent::_filter_uri($str));
    }
}

// EOF

答案 2 :(得分:0)

您可能需要更改config / route.php中的规则以接受URL中的编码字符。您还可以查看以下文章中的一些解决方案:

答案 3 :(得分:0)

我实际上必须做urlencode(urlencode(urlencode(

和urldecode(urldecode(urldecode(

3次!!它终于奏效了,两次都没有削减它。

答案 4 :(得分:0)

尝试

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中

这种方法适合我

答案 5 :(得分:0)

这已经很老了,但我想我会分享我的解决方案。

不要将参数作为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');
    ...

这似乎有效。