코드이그나이터 index.php 없애기

2015. 12. 7. 13:34Programing/Mobile App _Web

코드이그나이터 index.php 제거(apache)

아래의 예제는 CodeIgnighter 한국사용자포럼의 매뉴얼에서도 다루는 주제입니다. 여기를 참고하세요.

예제를 읽어보면 얼마나 한국어 매뉴얼이 잘 되어있는지를 재삼 깨닫게 됩니다. 다만 아래의 index.php를 제거하는 부분에서 조금 난해한 면이 있어서 다시 이를 다뤄보도록 하겠습니다.

코드이그나이터 URL 구조

코드이그나이터는 기본적으로 MVC 패턴을 지향합니다. 따라서 웹페이지를 불러올 때도 이 패턴에 맞추어 불러옵니다. url로 호출할 때 컨트롤러/함수/변수 형식으로 불러오는 것이지요. (쓰면서 계속 느끼는거지만 이게 참 편리합니다)

예를들어, /application/controllers/welcome.php 컨트롤러 내부에 있는 함수 hello($var)가 뷰페이지인 /application/views/helloworld.php 파일을 불러온다고 해봅시다. 이를 주소창에서 접근할 때는 이론적으로 다음과 같이 되야합니다만..

http://내홈피주소/컨트롤러/함수/변수값
http://dovetail.dothome.co.kr/welcome/hello/1

현실은 그렇지 않습니다;;

그 이유를 알고싶으시다면 코드이그나이터를 설치할 때의 index.php를 열어 보시면 압니다. 이 index.php가 코드이그나이터의 초기화를 담당하는 녀석인거죠. 따라서 위의 예제를 제대로 작동하려면 다음과 같이 입력합니다.

http://내홈피주소/index.php/컨트롤러/함수/변수값
http://dovetail.dothome.co.kr/index.php/welcome/hello/1

그러면 정상적으로 작동합니다.

본격적으로 index.php를 없애자

하지만 index.php 아래 주소가 늘어지는것이 마음에 안듭니다. 가독성도 떨어지구요. 이걸 없애보도록 하죠.

먼저 해당 아파치가 mod_rewrite를 지원해야 합니다. 보통 대다수의 웹호스팅 사이트가 다 지원합니다. 이걸 확인하기 위해서는 다음과 같은 코드를 페이지내에 입력해보실까요?

<?php phpinfo(); ?>

현재 php의 정보를 출력하는 명령어입니다. mod_rewrite가 로드되어 있으면 됩니다. 없으면 어떻하냐구요?? ..제가 아는 바로는 답이 없습니다.. 서버관리자에게 설치해달라고 문의 해보시면 되겠죠? 닷홈의 경우 이미 설치되어있군요?

최상위 디렉토리에 코드이그나이터를 설치한 경우

application 폴더와 system 폴더, index.php 파일이 위치한 디렉토리에 .htaccess 파일을 만들어줍니다. 있는 경우에는 편집을 합니다. 그리고 다음과 같은 코드를 추가해줍니다.

<IfModule mod_rewrite.c>
  RewriteEngine On
  RewriteBase /
  RewriteCond $1 !^(index\.php|images|captcha|data|include|uploads|robots\.txt)
  RewriteCond %{REQUEST_FILENAME} !-f
  RewriteCond %{REQUEST_FILENAME} !-d
  RewriteRule ^(.*)$ /index.php/$1 [L]
</IfModule>
하위 디렉토리에 코드이그나이터를 설치한 경우

자, 여기서 잠깐..

만약 코드이그나이터를 저처럼 최상위 디렉토리가 아닌 어떤 하위 디렉토리에 넣어서 사용하시는 경우엔 코드가 달라집니다.

예를들어 다음과 같은 경우는 최상위 디렉토리에 위치한 겁니다.

http://내홈피주소/index.php/컨트롤러/함수/변수값
http://dovetail.dothome.co.kr/index.php/welcome/hello/1

아래의 경우에는 하위 디렉토리에 위치한 경우죠. 과장해서 표현해봅니다.

http://내홈피주소/어떤폴더/저런폴더/이런폴더/index.php/컨트롤러/함수/변수값
http://dovetail.dothome.co.kr/어떤폴더/저런폴더/이런폴더/index.php/welcome/hello/1

하위 디렉토리에 위치한 경우에는 다음과 같은 코드를 사용해야 합니다.

<IfModule mod_rewrite.c>
  RewriteEngine On
  RewriteBase /
  RewriteCond $1 !^(index\.php|images|captcha|data|include|uploads|robots\.txt)
  RewriteCond %{REQUEST_FILENAME} !-f
  RewriteCond %{REQUEST_FILENAME} !-d
  RewriteRule ^(.*)$ 어떤폴더/저런폴더/이런폴더/index.php/$1 [L]
</IfModule>

제가 여기에서 너무 많은 시간을 소모했더라죠..




출처 : http://dovetail.tistory.com/19