笨:在URI段url编码URL不起作用(CodeIgniter: urlencoded URL in

2019-09-28 06:37发布

我试图把一个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/

Answer 1:

这似乎%2F打破东西的Apache。

可能的解决方案:

  1. preg_replace函数的/'s到-'s(或别的东西)发送的网址,然后再接通另一端前。
  2. 设置阿帕奇AllowEncodedSlashes在
  3. 一个黑客一点,但你甚至可以将网址保存到一个会话变量或什么,而不是通过URL *耸肩发送*
  4. 双网址发送前对其进行编码


Answer 2:

通过urlendode()'d在URL段,然后将其与自己的(MY_ *)类解码:

应用/核心/ MY_URI.php:

 class MY_URI extends CI_URI { function _filter_uri($str) { return rawurldecode(parent::_filter_uri($str)); } } // EOF 


Answer 3:

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

  • http://codeigniter.com/forums/viewthread/81365/
  • http://sholsinger.com/archive/2009/04/passing-email-addresses-in-urls-with-codeigniter/
  • 在笨URL段传递URL


Answer 4:

事实上,我不得不这样做进行urlencode(用urlencode(用urlencode(

和urldecode(urldecode(urldecode(

3次!! 它终于摸索,两次没剪。



Answer 5:

尝试

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对于我这种方法工作



Answer 6:

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

除了接受参数作为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');
    ...

这似乎工作。



文章来源: CodeIgniter: urlencoded URL in URI segment does not work