我想要像
这样的网址但CodeIgniter不允许我这样做。当我尝试访问某些URL时,我收到404错误(并且请求的页面存在)。
我知道我可以在URL中设置允许的字符,但我想到了编码它。但是,如果我做这样的事情:
http://www.example.com/<?php echo rawurlencode(string) ?>
甚至:
http://www.example.com/<?php echo rawurlencode(rawurlencode(string)) ?>
我还有404.为什么? '%'是允许的字符,为什么它不起作用?我该怎么做才能解决它?
答案 0 :(得分:1)
您可以通过 config / config.php 和permitted_uri_chars
密钥允许某些迹象。
然而,虽然我不完全确定,但我确实认为这些是默认限制以增加安全性。正如相关解释所示:
/*
|--------------------------------------------------------------------------
| Allowed URL Characters
|--------------------------------------------------------------------------
|
| This lets you specify with a regular expression which characters are permitted
| within your URLs. When someone tries to submit a URL with disallowed
| characters they will get a warning message.
|
| As a security measure you are STRONGLY encouraged to restrict URLs to
| as few characters as possible. By default only these are allowed: a-z 0-9~%.:_-
|
| Leave blank to allow all characters -- but only if you are insane.
|
| DO NOT CHANGE THIS UNLESS YOU FULLY UNDERSTAND THE REPERCUSSIONS!!
|
*/
例如,对当前设置如此简洁的是,您允许足够少的uris来解析ID,而不会冒''
,""
或类似的方式让它们受到攻击。当然有自动和手动$this->db->escape()
,但这只会增加更多故障。
答案 1 :(得分:0)
如果编译的字符串有urlencoded
,尝试将URI
字符串传递给/
时会产生错误,codeigniter会尝试将其解析为段,从而呈现404
,您需要使用的是查询字符串。
$string = rawurlencode(string)
http://www.example.com/class/method/?string=$string
然后是你的方法
使用get
function method()
{
$this->input->get('string');
}
答案 2 :(得分:0)
如果您想在URL中添加斜杠/
,请使用双原始编码。例如:
$string = rawurlencode(rawurlencode('/sth/sth'));