프로그래밍/CodeIgniter

[CodeIgniter] index.php 제거

떨어지는 용 2018. 2. 7. 12:08

▶CodeIgniter index.php 제거



▶설명


코드이그나이터(CodeIgniter)에서 전에 만든 컨트롤러 추가 예제를 기준으로 설명하겠습니다.


변경 전 URL : localhost/ci/index.php/Tutorial

변경 후 URL : localhost/ci/Tutorial


URL에 index.php가 포함되어있으면 보기도 좋지 않고, 사용하기도 좋지 않습니다.

이번에는 URL에서 index.php 제거 작업을 진행하도록 하겠습니다.


▶Apache 설정 변경


Apache에 conf/httpd.conf 파일을 열어서 mod_rewrite 모듈이 설정되어 있는지 확인합니다.

(가끔씩 보면, 모듈 설정 파일은 따로 분리되어 include 되는 경우도 있으니 include된 파일도 확인합니다.)

conf/httpd.conf

#LoadModule rewrite_module modules/mod_rewrite.so

위와 같이 존재되어 있다면 주석(#)을 제거합니다.

LoadModule rewrite_module modules/mod_rewrite.so
만약 위에 코드가 존재하지 않는다면 mod_rewrite 모듈을 검색하여 설치하시기 바랍니다.


그리고 현재 프로젝트 설정 폴더(Directory)에 AllowOverride가 All로 설정되어 있는지 확인합니다. (None으로 되어 있다면 All로 변경)

AllowOverride All


▶코드이그나이터(CodeIgniter) 설정 변경


코드이그나이터(CodeIgniter) 폴더를 기준으로 설명하겠습니다.


application/config/config.php

$config['index_page'] = '';

index.php를 찾아서 빈 값으로 설정합니다.

▶.htaccess 파일 추가 (또는 설정)


코드이그나이터(CodeIgniter)에 index.php가 존재하는 폴더에 .htaccess 파일을 추가합니다. (이미 존재하는 경우 수정합니다.) 

윈도우가 아닌 경우 퍼미션(Permisson)을 755로 설정합니다.


.htaccess

<IfModule mod_rewrite.c>
    RewriteEngine On
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteRule ^(.*)$ index.php/$1 [L]
</IfModule>


3~4번째줄

추가되어 있지 않은 경우, 모든 코드이그나이터(CodeIgniter) 하위에 존재하는 assets 폴더 혹은 robot.txt 등에 접근 할 수 없습니다.

(암묵적으로 index.php를 거치기 때문에 존재하지 않는 폴더로 인식)


▶실행



Tutorial 컨트롤러 실행

주소

localhost/ci/Tutorial

결과

Hello Index


Tutorial 컨트롤러에 index 메서드 실행

주소

localhost/ci/Tutorial/index

결과

Hello Index


Tutorial 컨트롤러에 second 메서드 실행

주소

localhost/ci /Tutorial/second

결과

Hello Second


▶.htaccess 3~4번째 줄 테스트



.htaccess 3~4번째줄 기능에 대해 보충하기 위해 작성합니다.

localhost/ci/license.txt 라는 파일을 기준에 예제입니다.

3~4번째 줄 설정된 결과

정상적으로 라이센스 정보가 표시되는 것이 확인됩니다.


.htaccess 파일 3~4번째줄 주석 처리

<IfModule mod_rewrite.c> RewriteEngine On #RewriteCond %{REQUEST_FILENAME} !-f #RewriteCond %{REQUEST_FILENAME} !-d RewriteRule ^(.*)$ index.php/$1 [L] </IfModule>

위와 같이 .htaccess 파일에서 3~4번째 줄을 주석으로 수정합니다.


3~4번째 줄 주석 결과


위와 같이 서버 에러가 발생합니다.