코드이그나이터 index.php 제거하기!
index.php 제거하기
이번 포스팅엔 index.php 제거를 해보자.
난 정말 이것때문에 밤샘을해가면서 뻘짓을 했던 경우라; 미리 포스팅 해두기로 했다 ㅠ
그리고 index.php 제거는 코드나이터 한국사용자포럼에도 나와있는 사항이다.
정확한 부분은 포럼에서 검색하여 보도록하자 :)
먼저 내 URL 경로가 host주소/코드이그나이터파일/index.php/컨트롤러 명
이라고 해야만 접속이 가능했었다.
그리고 불행하게도.. 현재 상황으로는 서버쪽의 파일을 접근할 수 없는 상황이다 ㅠ
근데 포럼에서는 서버쪽 파일 중 httpd.conf 에서 변경하라는 사항이 있었는데, 난 이 파일안의 내용을 너무 보고싶었으나 접근할 수 없었기에 포기했었다. ㅠㅠ
그러던 중 test폴더를 만들고 test.php라는 파일을 만든 후 거기 안의 내용은
<?
phpinfo();
?>
라고 저장한 뒤 php 인포메이션을 확인하도록 해보았다 :)
정말정말 다행히도 mod_rewrite가 활성화 되어있었다!
mod_rewrite가 활성화 되어있어야만 index.php를 제거할 수 있다고 포럼에선 나와있다.
mod_rewrite가 무엇인지 몰라 찾아보니
mod_rewrite 는 규칙 기반으로 URL 을 동적으로 전환(redirecting) 및 재작성(rewriting)할 수 있는 아파치 확장 모듈이다. 알아 두면 웹 서비스 운영시 많은 도움이 되는 모듈이다.
라고 명시되어 있었다. (만일 phpinfo를 했는데도 불구하고 위 사진과 같이 mod_rewrite가 없다면
서버 디렉토리안의 httpd.conf 파일을 건드려야 된다 ㅠㅠ.. 요새 보통은 mod_rewrite가 기본적으로 깔린다고 한다.)
아무튼 나는 이 모듈이 있음에도 불구하고.....뻘짓하게 된 이유가 바로 index.php 경로와 htaccess 파일의 경로가 무조건 같아야하는데 이를 모르고 있었기 때문이다.. (실은 코드이그나이터 파일명/application/index.php가 기본 index.php인 줄 알았다 ;;; 역시 머리가 나쁘면 몸이 고생한다고..ㅠㅠ 아이고 내 몸..)
mod_rewrite가 활성화 되었으면 이제 본격적으로 index.php를 제거해보자 =)
.htaccess 파일을 열어보자
.htaccess 파일을 열면 모든 것이 deny 되어있는 것을 볼 수가 있다.
이러한 명령어를 모~두 지우고 아래와 같은 내용으로 바꿔주자.
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php/$1 [L]
</IfModule>
설명을 하자면, rewrite엔진을 On으로 바꿔주고
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
요 부분은 파일 혹은 디렉토리가 존재하면 아파치가 알아서 처리하라는 명령이다.
그리고 마지막으로
RewriteRule ^(.*)$ index.php/$1 [L] 에서
RewriteRule은 구글링에 따르면,
Basically means that if the request is done that matches(명령어) 라고 한다. 대충 해석해보자면, 보통의 의미론 요청이 규칙에 맞으면 완료하라는 말이 될 수 있겠다.
^(.*)$은 matches any URL except the server root로, 서버측 root 외의 다른 url을 매치시키란 말이 되고,
index.php/$1은 it will be rewritten as index.php?url=$1
which means a request for olle
will be rewritten as index.php?url=olle
. 라고 하는데, 정확히 olle의 뜻을 모르겠다 ㅠㅠ
마지막으로 [L]은 if the rule matches, don't process any more RewriteRules below this one.
만약 규칙이 맞으면, 더이상 RewriteRules 이하를 실행하지 말라는 명령이다 :)
이제 간단하게 파일 수정이 완료되었으면 index.php 파일과 .htaccess파일의 경로가 같은 곳으로 저장 해서 실행을 해보면!
이렇게 index.php 없이 사용되는 화면을 볼 수 있다!!
이상으로 코드이그나이터 index.php 제거를 마치겠다~