PHP 주요레퍼런스/기타

아파치 AllowOverride와 .htaccess

웹 개발자의 비상 2013. 8. 1. 11:15

[아파치] AllowOverride와 .htaccess

일반적으로 게시판이나 기타 BBS에 파일을 첨부할 경우
적지 않게 text/html 형식의 *.html *.htm 파일이  많이 올라오곤 합니다.

보안의 이유로 올라온 text/html 파일을 강제로 .phps나 .txt 로 마임타입을 바꾸는 경우가
많으나 올라온 text/html 파일에  php코드가 안들어간 순수 HTML코드만 있을 경우
일반 사용자가 보기엔 상당히 불합리하다.

그래서 업로드 디렉토리에 한에서 *.html *.htm파일을 php코드가 실행되지
않도록 마임타입을 재조정해야 합니다.

우선
위의 문제를 해결하기 위해서는 아파치 httpd.conf 파일에서 다음과 같은 조건이 우선 해결되어
있어야 한다. 즉,
아파치 server config에서 최소한 사용자 계정 디렉토리나 특정 디렉토리에 access control 파일
(이하 '.htaccess')을 사용할 수 있도록 AllowOverride에 최소한 FileInfo 기능을 포함하고 있어야
한다. 이는 .htaccess파일을 이용해서 Addtype지시자를 사용하기 위함이다.

예:
<Diretory /home/*/public_html>
   AllowOverride FileInfo (또는 All 도 가능)
</Diretory>

위와 같은 조건만 만족한다면
사용자 계정에서는 .htaccess 파일을 이용해서 이제는 마음대로 마임타입을 조절할 수 있다.

만약 이와 같은 조건이 만족하지 않는다면 서버관리자에게 문의해 보세요.
아마 대부분 웹호스팅 업체라면 위와 같은 기능을 포함해서 좀더 많은 기능을 .htaccess파일에 사용할
수 있도록 해 놓았을 것이니 크게 문제가 되지 않는다.

파일 업로드 디렉토리로 이동한 다음 .htaccess 파일을 만들고 다음과 같이
text/html 마임타입을 재조정합니다.

--- /path/to/file_upload_dir/.htaccess-----------------
AddType text/html .html .htm
----------------------------------------------------------

꼭 파일 업로드 디렉토리에 적용되는 경우가 아니고
전체나 다른 특정 디렉토리에 적용할 수 있습니다.

만약 .htaccess 파일의 문법이 틀리면 500 에러를 내므로 주의하기 바랍니다.
이렇게 설정하면 올라온 파일(*.html)에 비록 php 코드가
들어가 있더라도 php코드는 해석하지 않고 웹브라우저로 넘겨주기 때문에
원하는 설정이 되는 셈이다.

만약, 자신의 홈페이지가 확실하게 *.html *.htm은 오직 HTML 코드만 사용할 수 있도록
양분되어 있다면 다음과 같이 DocumentRoot에서 설정 할 수 있습니다.

--DocumentRoot/.htaccess ----------------------------------
AddType application/x-httpd-php .php .php3 .ph .lib .inc .conf
AddType application/x-httpd-php-source .phps
AddType text/html .html .htm
------------------------------------------------------------

그리고
*.ph *.inc *.lib 등등의 설정 파일에 대해서 직접 URL 호출을 금지시키려면 다음과 같이 설정합니다.

--DocumentRoot/.htaccess ----------------------------------
<FilesMatch "\.(ph|inc|lib)">
  Order allow, deny
  Deny from all
</FilesMatch>
AddType application/x-httpd-php .php .php3 .ph .lib .inc .conf
AddType application/x-httpd-php-source .phps
-----------------------------------------------------------

아래는 실제가 필자가 사용하는 설정 내용이니 참고하기 바랍니다.

--DocumentRoot/.htaccess ---------------------------------
Options FllowSymLinks MultiViews
<FilesMatch "\.(ph|inc|lib)">
  Order allow, deny
  Deny from all
</FilesMatch>
AddType application/x-httpd-php .php .php3 .ph .lib .inc .conf
AddType application/x-httpd-php-source .phps
AddType text/html .html .htm
php_value auto_prepend_file /home/xxx/xxx/header.php
php_value auto_append_file /home/xxx/xxx/footer.php
-----------------------------------------------------------

참고로)
AllowOverride FileInfo 기능은 해당 디렉토리에 대한
문서 타입을 컨트롤 하는 기능으로 다음과 같은 지시자를 사용가능합니다.
Addtype, DefaultType, ErrorDocument, 기타

728x90