Home » Blog » index.php 죽이기!!

index.php 죽이기!!

많은 분들이 codeigniter 도입 초반부에 index.php 없이 쓰려다 암초에 걸려서
포기하거나 스트레스를 받거나 하실 겁니다.
(사실 저도 가끔 다른 환경에 설치하다보면 안될 때가 있습니다.)

그래서 여태까지 경험으로 축적했던 내용들을 풀어볼까 합니다.

http://codeigniter-kr.org/index.php/lecture/lists

http://codeigniter-kr.org/lecture/lists 

어느 것이 더 직관적일까요? 그리고 사용자입장에서 메인을 거치지 않고 다이렉트로 특정위치에
접근하고 싶을때 index.php라는 9자를 더 치느냐 치지 않느냐는 엄청난 차이입니다.
주소 치고 1-2초안에 사이트 안 뜨면 꺼버리는 우리 나라 사용자 환경에서는 9자 안 치는 것도
큰 메리트입니다.

실무로 들어가 보면 index.php를 주소에서 없애기 위해서는 apache 의 모듈중 하나인 mod_rewrite를 이용해야 합니다.
(mod_rewrite에 대한 자세한 것은 검색을 통해 찾아보세요. 정규식 머리 아픕니다. ^^;)

1. apache conf인 httpd.conf 파일에서 mod_rewrite 로 검색을 하면 통상적으로

1.#LoadModule rewrite_module modules/mod_rewrite.so

라는 라인이 나옵니다. 주석처리가 되어 있을 수 있구요. 일단 주석처리가 되어 있다면 주석(#)을 제거하시구요.
위 라인이 없다면 mod_rewrite 모듈을 설치하셔야 하는데 (요즘 apm 셋팅에는 거의 포함되어 있습니다.)
설치법도 검색으로… ^^; codeigniter에서의 사용법이 주 인지라…

그리고 또 한가지 대부분의 분들이 놓쳐서 헤매는 부분인데 .htaccess 파일을 사용하려면 서버 디렉토리의
AllowOverride 옵션을 All로 설정을 하셔야 합니다. 기본값은 None입니다.
이 셋팅을 바꾸지 않으면 죽어도 index.php 를 없앨 수 없습니다.

1.AllowOverride None -> AllowOverride All

설정을 저장하고 아파치 서버를 재시작 합니다.
이제 mod_rewirte 모듈을 이용하여 .htaccess 파일을 쓸 수 있게 되었습니다.

2. config.php 파일을 설정할 차례입니다. (http://www.codeigniter-kr.org/lecture/view/197/page/1 참고)

1.//$config['index_page'] = 'index.php';
2.$config['index_page'] = '';

설정파일의 두번째 항목에서 index.php라는 값을 제거하시면 됩니다.

3. 이제 .htaccess 파일을 설정할 차례입니다.
많은 분들이 시행착오를 겪고 있기에 정형화된 파일을 어느 누군가가 만들어서 배포했고 우리들은 쭉 사용하고 있습니다.
이 파일은 index.php와 동일한 디렉토리에 위치하면 됩니다.

1.<IfModule mod_rewrite.c>
2.RewriteEngine On
3.RewriteBase /
4.RewriteCond $1 !^(index\.php|images|captcha|data|include|uploads|robots\.txt)
5.RewriteCond %{REQUEST_FILENAME} !-f
6.RewriteCond %{REQUEST_FILENAME} !-d
7.RewriteRule ^(.*)$ /index.php/$1 [L]
8.</IfModule>

.htaccess라고 파일을 만들고 위 내용을 복사해넣습니다. 저장후 파일의 퍼미션을 누구나 실행하고 읽을수있도록 주시면 됩니다. chmod 755 .htaccess (윈도우는 퍼미션 필요없습니다.)

위 내용을 주요부분만 설명하면  4번째 줄은 가변적으로 사용되는 줄이라 설명을 하겠습니다.

1.RewriteCond $1 !^(index\.php|images|captcha|data|include|uploads|robots\.txt)

index.php 파일이 있는 하위 디렉토리중 images, captcha, data, include, uploads 디렉토리와 index.php파일 자체, robots.txt 파일에는 index.php 를 없애는 정규식을 적용하지 않겠다는 말입니다.
무슨 말이냐 하면 위 라인이 없다면 http://codeigniter-kr.org/images/logo_ci1.png 라고 접근하면 에러가 뜹니다.
위 .htaccess 파일은 주소에서 무조건 index.php 파일을 제거하는 것인데
http://codeigniter-kr.org/images/logo_ci1.png 라고 치면
http://codeigniter-kr.org/index.php/images/logo_ci1.png 이렇게 인식을 하게 됩니다. 당연히 에러가 나겠죠.

다시 말하면 .htaccess는 주소에 index.php가 무조건 있다고 가정한 상태에서 그걸 제거해주는 겁니다.
그래서 그 룰을 적용하지 않고 싶을때 위의 한줄에 기술을 해주는 겁니다.

저렇게 해줘야  http://codeigniter-kr.org/images/logo_ci1.png 라고 쳤을때 이상없이 접속이 되고
그 이외의 디렉토리나 파일에는 index.php 없애기가 적용이 되는 겁니다.

설명이 길어졌지만 꺼꾸로 이렇게 이해하시면 됩니다.
“내가 index.php 하위에 디렉토리를 하나 만들고 이미지나 js파일을 넣고 싶다.”
그러면 그 만든 디렉토리를 저 라인안에 삽입을 해줘야 합니다.

만약 js 라는 디렉토리를 만들고 그 안에 자바스크립트 파일을 넣는다고 하면

1.RewriteCond $1 !^(index\.php|images|captcha|data|include|uploads|js|robots\.txt)

이렇게 js라고 넣어줘야 에러 없이 접근을 할수가 있습니다.

자. index.php 없애기 끝났습니다.

알고나면 쉬운 것이 되는 것이고 모를 때는 어렵고 답답한 것이겠죠.

그리고 시간 나실때 mod_rewrite도 검색해서 공부해두시면 좋습니다.