개발 Q&A

제목 한글 검색시 특정한글이 포함된 경우 404에러 객체없음! 문제
카테고리 PHP
글쓴이 율하파파 작성시각 2017/02/21 18:51:31
댓글 : 10 추천 : 0 스크랩 : 0 조회수 : 20149   RSS

코드이그나이터를 써서 처음으로 개발 및 납품한 곳에서 오류가 발생한다고 연락이 왔습니다.

현상은 목록 검색에서 "이종석" 이름으로 검색하면 "객체없음!" 이라고 페이지가 뜬다는 것이였습니다.

그래서, 이리저리 확인해 본 결과 검색어에 특정 단어의 글이(여기서는 "종") 포함되면 "객체없음! 404에러가" 발생하는 겁니다.

   - 인코딩한 url : http://ecofarm.chungnam.go.kr/farm/lists2/q/%EC%9D%B4%EC%A2%85%EC%84%9D/page/1/

   - 인코딩 하지 않은 url : http://ecofarm.chungnam.go.kr/farm/lists2/q/이종석/page/1/

위 두가지 모두 동일한 오류가 생기는데, 한글 관련된 옵션은 다 'UTF-8'로 설정해 두었음에도 왜 이런게 발생하는지 모르겠네요.

원인을 찾기 위해 종일 검색을 하면서 뒤져봤지만 가장 유사한 검색결과는  ' '한글'부분에 '종', '눅', '년' 과 같은 글자가 포함될 경우 404에러가 발생했습니다. 이 부분은 스프링이 아닌 톰캣의 URL요청상의 문제이며 요청 URL의 인코딩과정에서 일어나는 현상' 이라고 정도 뿐입니다. (참조 URL: https://slipp.net/questions/254)

저는 APACHE, PHP, MYSQL로 구성하여 사용하였기에 위의 내용이 직접적인 도움이 되지 못했습니다.

하지만 한가지 알아낸 건 XAMPP의 구버전에서 동일하게 포팅하여 서비스 동작을 해보면 정상동작하는 겁니다.

즉, XAMPP-WIN32-5.5.19 에서는 정상 동작하고, XAMPP-WIN32-5.6.11 이상의 버전에서는 문제가 발생하는 것입니다.

그래서 두 아파치 폴더를 비교해 힌트를 얻을려고 했지만, 실력이 미비한 관계로 아직 원인 확인이 되지 않았습니다.

고심끝에 여기에 질문을 남겨, 선배님들의 조언을 구하고자 합니다.

감사합니다.

 다음글 모바일웹 하단메뉴에 질문드립니다. (2)
 이전글 curl 초보입니다 ㅠ 로그인 후 화면 보이기 질문..... (1)

댓글

kaido / 2017/02/22 09:06:06 / 추천 0

url 한글 오류에 대해서는 일괄되도록 안내해 드리는 것이 있습니다.

우선

config/config.php 파일에서

$config['permitted_uri_chars'] = 'a-z 0-9~%.:_\-()@!+=';

이렇게 수정

$config['permitted_uri_chars'] = '가-힣 a-z 0-9~%.:_\-()@!+=';

 

최우선으로 확인할 사항입니다.

율하파파 / 2017/02/22 09:35:51 / 추천 0

$config['permitted_uri_chars'] = '가-힣a-z 0-9~%.:_\-'; 

이렇게 수정을 해 놓은 상태입니다. 

코드이그나이터의 문제라기 보다는 아파치의 문제로 보입니다.

 XAMPP 대신 WAMP Stack 5.6.30-1을 설치해서 동일하게 테스트한 결과가 아래와 같습니다.

Not Found

The requested URL /farm/lists2/q/종/page/1/ was not found on this server.

위를 보시면 검색어가 인코딩된 문자가 아니라 깨져버리는 그 원인을 모르겠네요.

kaido / 2017/02/22 09:44:21 / 추천 0

그럼 httpd.conf 파일에 추가해 주세요.  물론 재시작은 기본이구요.

AddDefaultCharset UTF-8 
율하파파 / 2017/02/22 09:53:29 / 추천 0

kaido 님 먼저 댓글 주셔서 감사해요.

말해주신 내용 적용해서 재시작하여 확인했는데, 동일하게 발생하고 있네요.

그리고, 기존 XAMPP-WIN32-5.5.19 버전에서는 말해주신 내용이 없어서 정상적으로 되는데 그것이 신기하네요.

한대승(불의회상) / 2017/02/22 11:00:45 / 추천 0

"종" 이나 "석" 은 잘 넘어 가는데 "종석", "%EC%A2%85%EC%84%9D" 으로 테스트 해도 증상은 동일 하군요.

웹브라우져(크롬, IE, 엣지)에서 동일한 에러가 나는것으로 봐서 kaido님 의견처럼 서버 설정이나.htaccess에 설정된 rewrite 룰과 관련이 있는것 같은데 정확한 원인과 해결책은 아직 찾지 못했습니다.

 

 

율하파파 / 2017/02/22 11:16:07 / 추천 0

불의회상님은 "종"으로 하면 넘어간다니 저랑은 다르네요.

.htaccess에 설정된 rewrite 룰도 검색을 더 조사를 해봐야겠네요.

kaido / 2017/02/22 11:30:12 / 추천 0

찾았습니다.

.htaccess 에 index.php 부분을 이렇게 변경하세요.

RewriteRule !index\.php index.php [NC,L]

 

rewrite 룰을 타지 못해서 CI가 아닌 php 모드로 실행 하려다 보니, 해당 파일이 없어서 나오는 문제 입니다.

샤오란 / 2017/02/22 11:31:46 / 추천 0
댓글을 보고 있으니 존경스럽군요!
한대승(불의회상) / 2017/02/22 12:47:22 / 추천 0

@kaido 잘 되네요. ^^ 수고 하셨습니다.

다른 URL은 어떻게 되는지 테스트해 봐야겠습니다.

율하파파 / 2017/02/22 13:24:00 / 추천 0

하아~!. 이건 진짜. 대단하시네요. kaido님 감사합니다. 잘됩니다.

설명해 주신 rewrite 룰에 대한 내용을 이해하지는 못했지만 일단 정상적으로 검색 및 에러는 더 이상 나타나지 않습니다.

이번 기회로 rewrite 에 대해 좀 더 자세히 알아봐야겠습니다.

rewrite가 무슨 역할하는지 모르고 그냥 갔다 쓰기만 했었거든요.

다시한번 kaido 님 고맙습니다.