Apache HTTP Server Version 2.0
아파치 투토리얼: .htaccess 파일
.htaccess
파일을 사용하여 디렉토리별로 설정을
변경할 수 있다.
.htaccess 파일
관련된 모듈 | 관련된 지시어 |
---|---|
무엇이며/어떻게 사용하는가
.htaccess
파일(혹은 "분산 설정파일")을
사용하면 디렉토리별로 설정을 변경할 수 있다. 여러 설정 지시어가
있는 파일을 특정 문서 디렉토리에 두면, 그 디렉토리와 모든
하위디렉토리에 지시어를 적용한다.
주의:
.htaccess
파일명을 다르게 사용하고 싶다면,
AccessFileName
지시어를
사용하여 변경할 수 있다. 예를 들어, .config
파일명을 사용하려면 서버 설정파일에 다음과 같이 추가한다.
AccessFileName .config
일반적으로 .htaccess
파일은 주설정파일과 문법이
같다. AllowOverride
지시어가 이 파일에 나올 수 있는 내용을 결정한다. 이 지시어는
.htaccess
파일에서 허용하는 지시어 분류를 지정한다.
지시어를 .htaccess
파일에서 사용할 수 있다면,
해당 지시어 문서의 Override 항목은 지시어를 허용하기위해
AllowOverride
에 사용할
값을 알려준다.
예를 들어, AddDefaultCharset
지시어 문서를 보면 이 지시어를 .htaccess
파일에서
사용할 수 있다. (지시어 요약에서 사용장소 항목을 보라.)
Override
줄에 FileInfo
가 있다. 그래서 이 지시어를
.htaccess
파일에서 사용하기위해서는 최소한
AllowOverride FileInfo
가 필요하다.
특정 지시어를 .htaccess
파일에서 사용할
수 있는지 궁금하면 지시어 문서의 사용장소 항목에 ".htaccess"가
있는지 확인한다.
언제 .htaccess 파일을 사용하나 (혹은 사용하지 않나)
일반적으로 주서버파일에 접근할 수 없는 경우가 아니라면
.htaccess
파일을 사용하면 안된다. 예를 들어,
사용자 인증이 항상 .htaccess
파일에 있어야
한다는 것은 잘못 알려진 오해다. 이는 사실이 아니다. 주서버설정에
사용자 인증 설정을 적을 수 있고, 사실 이러길 권한다.
.htaccess
파일은 컨텐츠 제공자가 디렉토리별로
서버 설정을 다르게하고 싶지만 서버 시스템에 root 권한이
없는 경우에 사용한다. 서버 관리자가 설정을 자주 변경하고
싶지 않은 경우 일반 사용자가 직접 .htaccess
파일을 수정하도록 허용하는 것이 바람직하다. 예를 들어, 한
컴퓨터에 여러 사용자 사이트를 서비스하는 ISP에서 사용자가
자신의 설정을 변경하고 싶은 경우가 그러하다.
그러나 일반적으로 .htaccess
파일은 가급적
피해야 한다. .htaccess
파일에서 허용하는 지시어는
주설정파일의 <Directory>
섹션과 같은 효과가
있다.
다음 두가지 큰 이유때문에 .htaccess
파일
사용을 피해야 한다.
첫번째는 성능이다. AllowOverride
가 .htaccess
파일을 사용하도록 허용하면, 아파치는 디렉토리마다
.htaccess
파일을 찾는다. 그래서
.htaccess
파일을 허용하면 실제로 파일을 사용하지
않는 경우에도 성능이 떨어진다! 또, .htaccess
파일은 문서를 요청할때마다 읽어들인다.
게다가 적용해야 하는 전체 지시어를 모으기위해 아파치는
모든 상위 디렉토리에서 .htaccess
파일을 찾는다.
(어떻게 지시어를 적용하나 절을 참고.)
그래서 /www/htdocs/example
디렉토리에 있는
파일을 요청하면, 아파치는 다음 파일들을 찾아야 한다.
/.htaccess
/www/.htaccess
/www/htdocs/.htaccess
/www/htdocs/example/.htaccess
그래서 그 디렉토리에 있는 파일을 접근할 때마다 설정파일이
전혀 없어도 파일시스템을 4번 더 접근해야 한다.
(/
에서도 .htaccess
파일을 허용한
경우를 말한다. 보통은 허용하지 않는다.)
두번째 이유는 보안이다. 사용자에게 서버설정 변경 권한을
주면 당신이 감당할 수 없는 변화가 일어날 수 있다. 사용자에게
이런 권한을 줄지 곰곰이 생각하라. 또, 사용자가 원하는 것보다
적은 권한을 주면 기술지원요청이 들어온다. 사용자에게 가능한
권한 수준을 명확히 알려라. 사용자에게 AllowOverride
를 어떻게 설정하였는지
정확히 알리고 관련 문서를 제공하면 앞으로 혼란을 피할 수
있다.
지시어를 /www/htdocs/example
디렉토리의
.htaccess
파일을 두는 것과 주서버설정의
<Directory /www/htdocs/example>
Directory
설정에 두는 것은 완전히 같다.
/www/htdocs/example
에 있는
.htaccess
섹션:
/www/htdocs/example
에 있는
.htaccess 파일 내용
AddType text/example .exm
httpd.conf
파일에 있는 섹션
<Directory /www/htdocs/example>
AddType text/example .exm
</Directory>
그러나 파일을 요청할 때마다 설정을 읽지않고 아파치가 시작할때 한번만 설정을 읽기때문에 같은 설정을 서버설정파일에 사용하면 성능이 더 빠르다.
AllowOverride
지시어를
none
으로 설정하면 .htaccess
파일을
완전히 사용할 수 없다.
AllowOverride None
어떻게 지시어를 적용하나
.htaccess
파일을 발견한 디렉토리와 그 디렉토리의
모든 하위디렉토리에 .htaccess
파일에 있는 설정
지시어를 적용한다. 그래서 상위디렉토리의 .htaccess
파일을 주의해야 한다. 발견한 순서로 지시어를 적용한다. 특정
디렉토리에 있는 .htaccess
파일은 상위디렉토리에
있는 .htaccess
파일의 지시어를 무효로 만들
수 있고, 상위디렉토리에 있는 지시어는 더 상위디렉토리 혹은
주설정파일에 있는 지시어를 무효로 만들 수 있다.
예제:
/www/htdocs/example1
디렉토리에 다음과 같은
.htaccess
파일이 있다.
Options +ExecCGI
(주의: .htaccess
파일에 "Options
" 지시어를 사용하려면
"AllowOverride Options
"가 필요하다.)
/www/htdocs/example1/example2
디렉토리에는
다음과 같은 .htaccess
파일이 있다.
Options Includes
이 두번째 .htaccess
파일의
Options Includes
가 이전 설정을 완전히 무효로
만들기때문에 /www/htdocs/example1/example2
디렉토리는 CGI 실행을 허용하지 않는다.
인증 예제
인증 방법을 알기위해 바로 이곳부터 읽는다면 주의할 것이
있다. 암호 인증을 하려면 .htaccess
파일이
필요하다는 오해가 널리 퍼져있다. 이는 사실이 아니다.
주설정파일의 <Directory>
섹션에 인증 지시어를
두는 것이 더 권장하는 방법이고, 서버의 주설정파일을 수정할
수 없는 경우에만 .htaccess
파일을 사용해야
한다. 언제 .htaccess
파일을 사용해야 하는지와
사용하지 말아야 하는지는 위에서
설명하였다.
앞에서 말했지만 아직도 .htaccess
파일이
필요하다고 생각되면 아래 설정이 도움이 될 것이다.
이 지시어가 동작하려면 "AllowOverride AuthConfig
"가
있어야 한다.
.htaccess
파일 내용.
AuthType Basic
AuthName "Password Required"
AuthUserFile /www/passwords/password.file
AuthGroupFile /www/passwords/group.file
Require Group admins
이 지시어가 동작하기위해서는
AllowOverride AuthConfig
지시어가 필요함을
명심하라.
인증과 권한부여에 대한 자세한 설명은 인증 투토리얼을 보길 바란다.
Server Side Includes 예제
또다른 일반적인 .htaccess
파일의 용도는
특정 디렉토리에서 Server Side Includes를 가능하게 만드는
것이다. 원하는 디렉토리의 .htaccess
파일에
다음과 같은 설정 지시어를 사용하면 된다.
Options +Includes
AddType text/html shtml
AddHandler server-parsed shtml
이 지시어가 동작하려면 AllowOverride Options
와
AllowOverride FileInfo
가 모두 필요함을 명심하라.
server-side includes에 대한 자세한 설명은 SSI 투토리얼을 보길 바란다.
CGI 예제
마지막으로 .htaccess
파일을 사용하여 특정
디렉토리에서 CGI 프로그램 실행을 허용하고 싶다면, 다음과
같은 설정을 사용한다.
Options +ExecCGI
AddHandler cgi-script cgi pl
혹은 이 디렉토리에 있는 모든 파일을 CGI 프로그램으로 처리하고 싶다면 다음과 같은 설정도 가능하다.
Options +ExecCGI
SetHandler cgi-script
이 지시어가 동작하려면 AllowOverride Options
와
AllowOverride FileInfo
가 모두 필요함을 명심하라.
CGI 프로그래밍과 설정에 대한 자세한 설명은 CGI 투토리얼을 보길 바란다.
문제해결
.htaccess
파일에 둔 설정 지시어가 원하는
기능을 하지 않는 경우 여러가지 이유가 있을 수 있다.
가장 일반적인 문제는 설정 지시어를 가능하게 만드는 AllowOverride
를 설정하지 않은
경우다. 문제가 되는 파일 영역에 AllowOverride None
이
없는지 확인한다. .htaccess
파일을 아무렇게나
적은 다음 페이지를 다시 접근하여 쉽게 검사해볼 수 있다.
서버 오류가 나오지 않으면 거의 확실히
AllowOverride None
을 사용한 경우다.
반대로 문서에 접근할때 서버 오류가 발생하면 아파치 오류로그를
살펴봐라. 아마도 .htaccess
파일에 있는 지시어를
허용하지 않는다고 할 것이다. 아니고 문법 오류가 있다면 오류를
고친다.