CI 묻고 답하기

제목 index.php 죽이기 글을 보면서 궁금한 것 하나가 생겼습니다.
글쓴이 하늘치 작성시각 2013/09/30 14:14:59
댓글 : 2 추천 : 0 스크랩 : 0 조회수 : 14943   RSS
안녕하세요. 오랜만에 글을 남기네요..  ^^;



요즘 회사에서 멀티(?) CI  구조로 뭘 좀 만들어보려고 하는데, 세팅하다가 htaccess 설정 내용에 궁금한 것이 하나 생겼습니다.

/index.php 와 같은 depth의 위치에 /tmp 라는 디렉토리를 만들고, 그 안에 sample.txt 라는 파일을 넣은 다음, 주소창에서 불러와봤습니다.

예를 들어, 
http ://abc.com/tmp/sample.txt 
라고 한 거죠.

htaccess 의 내용은 웅파님의 index.php 죽이기 라는 글에서 보여주신 예시를 이용해 아래와 같이 세팅했습니다.

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


여기에서 htaccess 파일 내용 중에 아래의 한 줄 짜리(이하 A코드)는 이해가 되는데,
 RewriteCond $1 !^(index\.php|images|captcha|data|include|uploads|robots\.txt)

아래의 두 줄 짜리(이하 B코드)는 왜 넣어주셨는지 헷갈리기 시작했습니다.
 RewriteCond %{REQUEST_FILENAME} !-f
 RewriteCond %{REQUEST_FILENAME} !-d



1. A코드는 남기고, B코드는 삭제한 경우..
http ://abc.com/tmp/sample.txt 로 접속하면, 
404 Page Not Found 404 에러가 나옵니다.
A코드에 tmp 를 지정하지 않았으니 이건 당연한 거겠지요?



2. 이번엔 A코드를 삭제하고, B코드만 남긴 후 접속하면,
sample.txt 의 내용이 브라우저에 나옵니다. 

B코드의 의미가 '파일이나 디렉토리가 존재하면 index.php를 거치지 않고 직접 아파치가 처리 하라는 뜻'이기 때문이라고 불의 회상님께서 댓글 달아주셔서 이번 경우도 이해할 수 있었습니다. 



3. 여기에서 의문점이 생겼습니다.
이렇다면, B코드를 사용한다면 A코드는 필요 없는 것이 아닌가 하는 것이었죠.





정리하자면.. 

B코드 없이 A코드만  사용하는 것이 기존에 제가 알고 있던 방식이었습니다. 브라우저 주소창에서 index.php를 죽이면서도, 지정한 디렉토리 이외에는 외부에서 직접 접속할 수 없도록 한 것이었으니까요. 

그런데 B코드가 들어감으로 인해서, A코드 내용에 디렉토리명을 명시하지 않아도 모든 디렉토리의 내용에 외부 접근이 가능하다면, 굳이 A코드가 필요한가 하는 생각이 들었습니다. 

음.. 혹시 예전처럼 모든 디렉토리에 접근가능하도록 하는 것이 목적이라면 상관없겠다는 생각도 듭니다만..  

아무튼 궁금했습니다. 
저는 제가 뭔가 세팅을 잘못해서 그런 줄 알고 주말에 삽질을 좀 했거든요.. 


두서없이 적어봤는데, 다른 분들은 어떻게 생각하시는지 궁금합니다~ 

 다음글 조회수에 대해 질문 있습니다. (1)
 이전글 CI 라우팅질문드립니다. (3)

댓글

한대승(불의회상) / 2013/09/30 17:11:02 / 추천 0
잘 정리 해 주셔서 감사 합니다.

지적하신대로 보안(?)을 위해서라면 A코드만 놔두고 B코드를 삭제 하는게 맞습니다.
사용하기 편리하도록 하기 위해서라면 A코드를 삭제하고 B코드만 남기는게 맞습니다.

이 글을 보시는 분들은 용도에 맞추어 잘 사용하시리라 믿습니다.
사소하다고 생각될 수 있는 부분이지만 잘 질문해주시고 정리도 잘해 주셨군요.


하늘치 / 2013/10/01 18:35:40 / 추천 0
감사합니다.
이제 확실하게 알고 쓸 수 있겠어요. ^^

htaccess 파일의 내용이 아무래도 이해하기 어렵다보니, 혹여 다른 의미가 있는 건 아닌가 해서 올린 글이었습니다. 

다시 한 번 감사드립니다. ^^