2013-02-18 2 views
0

의 URL에 특수 문자를 갖는 내가 (. *)CodeIgniter의

http://www.example.com/ 같은 URL을 가지고

을 원하지만 CodeIgniter의 날 그렇게 할 수 없습니다. 일부 URL에 액세스하려고하면 404 오류가 발생하며 요청한 페이지가 존재합니다.

URL에 허용되는 문자를 설정할 수 있다는 것을 알고 있지만 인코딩하려고 생각했습니다.

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

또는 : 나는 같은 것을 할 경우,

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

나는 여전히 404 이유는 무엇입니까있어? '%'는 허용 된 문자이므로 작동하지 않는 이유는 무엇입니까? 그리고 그것을 해결하기 위해 무엇을 할 수 있습니까?

답변

0

인코딩 된 문자열이 /이있는 경우이 오류가 발생합니다 URI-urlencoded 문자열을 전달하는 데 노력하고, CodeIgniter는이 따라서 404 렌더링, 세그먼트로이 구문 분석하려고합니다, 사용할 필요 쿼리 문자열입니다. 당신의 방법에 다음

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

$string = rawurlencode(string)

사용 get

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

} 
+0

서풍 친화적 인 URL과 그 구조에 대한 나의 전체 개념은 폐허가됩니다. 일반 PHP에서는 2-3 줄의 코드에서 원하는 것을 얻을 수 있습니다. codeigniter에서 어떻게 그것을 얻을 수 있습니까? – user1010446

1

당신은 설정/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!! 
| 
*/ 

, 현재 설정에 대해 너무 깔끔한 당신이 몇 충분히 URI를 그들 '', "" 또는 비슷한 타협 한 것으로 위험없이 ID를 구문 분석 할 수 있다는 것입니다. 물론 자동 및 수동 $this->db->escape()이 있지만 더 많은 failsafes를 추가합니다.

0

URL에 슬래시 /을 넣으려면 double raw 인코딩을 사용하십시오. 예를 들면 다음과 같습니다.

$string = rawurlencode(rawurlencode('/sth/sth'));