0

我想要像这样的网址

http://www.example.com/ (*.)

但是 CodeIgniter 不允许我这样做。当我尝试访问某些 URL 时,我收到 404 错误(并且请求的页面存在)。

我知道我可以在 URL 中设置允许的字符,但我考虑过对其进行编码。但是,如果我这样做:

http://www.example.com/<?php echo rawurlencode(string) ?>

甚至:

http://www.example.com/<?php echo rawurlencode(rawurlencode(string)) ?>

我仍然得到 404。这是为什么呢?'%' 是允许的字符,为什么它不起作用?我能做些什么来解决它?

4

3 回答 3

1

您可以通过config/config.phppermitted_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(),但这只是增加了更多的故障保护。

于 2013-02-18T09:23:29.617 回答
0

当尝试将urlencoded字符串传递给URI它时,如果编码的字符串有 a ,它将产生错误/,codeigniter 将尝试将其解析为一个段,从而呈现 a 404,您需要使用的是查询字符串。

$string = rawurlencode(string)

http://www.example.com/class/method/?string=$string

然后在你的方法上

利用get

function method()
{
   $this->input->get('string');

}
于 2013-02-18T07:59:42.210 回答
0

如果您想/在 URL 中使用斜杠,请使用双原始编码。例如:

$string = rawurlencode(rawurlencode('/sth/sth'));
于 2013-02-23T17:39:07.900 回答