2015-02-16
참고 url : http://www.codeigniter-kr.org/lecture/view/213/page/1


삭제 대비용 원본글 복사

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라고 넣어줘야 에러 없이 접근을 할수가 있습니다.