我正在尝试将一个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/
答案 0 :(得分:3)
似乎%2F打破了apache的事情。
可能的解决方案:
答案 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');
...
这似乎有效。