PHP/Codeigniter

코드이그나이터 index.php 제거하기!

littlemk 2018. 3. 6. 10:41

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 ollewill 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 제거를 마치겠다~