<!DOCTYPE html SYSTEM "about:legacy-compat">
<html lang="ko"><head><META http-equiv="Content-Type" content="text/html; charset=EUC-KR">
<meta content="width=device-width, initial-scale=1" name="viewport">
<!--
        XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
              This file is generated from xml source: DO NOT EDIT
        XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
      -->
<title>아파치 투토리얼: .htaccess 파일 - Apache HTTP Server Version 2.4</title>
<link href="../style/css/manual.css" rel="stylesheet" media="all" type="text/css" title="Main stylesheet">
<link href="../style/css/manual-loose-100pc.css" rel="alternate stylesheet" media="all" type="text/css" title="No Sidebar - Default font size">
<link href="../style/css/manual-print.css" rel="stylesheet" media="print" type="text/css"><link rel="stylesheet" type="text/css" href="../style/css/prettify.css">
<script src="../style/scripts/prettify.min.js">
</script>

<link href="../images/favicon.png" rel="shortcut icon"></head>
<body id="manual-page"><div id="page-header">
<p class="menu"><a href="../mod/">모듈</a> | <a href="../mod/quickreference.html">지시어들</a> | <a href="https://cwiki.apache.org/confluence/display/httpd/FAQ">FAQ</a> | <a href="../glossary.html">용어</a> | <a href="../sitemap.html">사이트맵</a> | <a href="https://bz.apache.org/bugzilla/enter_bug.cgi?product=Apache%20httpd-2">Report a bug</a></p>
<p class="apache">Apache HTTP Server Version 2.4</p>
<img alt="" src="../images/feather.png"></div>
<div class="up"><a href="./"><img title="<-" alt="<-" src="../images/left.gif"></a></div>
<div id="path">
<a href="https://www.apache.org/">Apache</a> &gt; <a href="https://httpd.apache.org/">HTTP Server</a> &gt; <a href="https://httpd.apache.org/docs/">Documentation</a> &gt; <a href="../">Version 2.4</a> &gt; <a href="./">How-To / Tutorials</a></div><div id="page-content"><div id="preamble"><h1>아파치 투토리얼: .htaccess 파일</h1>
<button aria-label="Toggle language list" class="lang-toggle"><svg xmlns="http://www.w3.org/2000/svg" stroke-width="2" stroke="currentColor" fill="none" viewBox="0 0 24 24" height="16" width="16"><circle r="10" cy="12" cx="12"/><line y2="12" x2="22" y1="12" x1="2"/><path d="M12 2a15.3 15.3 0 0 1 4 10 15.3 15.3 0 0 1-4 10 15.3 15.3 0 0 1-4-10 15.3 15.3 0 0 1 4-10z"/></svg></button>
<div class="toplang">
<p><span>가능한 언어: </span><a href="../en/howto/htaccess.html" hreflang="en" rel="alternate" title="English">&nbsp;en&nbsp;</a> |
<a href="../es/howto/htaccess.html" hreflang="es" rel="alternate" title="Espa&ntilde;ol">&nbsp;es&nbsp;</a> |
<a href="../fr/howto/htaccess.html" hreflang="fr" rel="alternate" title="Fran&ccedil;ais">&nbsp;fr&nbsp;</a> |
<a href="../ja/howto/htaccess.html" hreflang="ja" rel="alternate" title="Japanese">&nbsp;ja&nbsp;</a> |
<a href="../ko/howto/htaccess.html" title="Korean">&nbsp;ko&nbsp;</a> |
<a href="../pt-br/howto/htaccess.html" hreflang="pt-br" rel="alternate" title="Portugu&ecirc;s (Brasil)">&nbsp;pt-br&nbsp;</a></p>
</div>
<div class="outofdate">이 문서는 최신판 번역이 아닙니다.
            최근에 변경된 내용은 영어 문서를 참고하세요.</div>

<p><code>.htaccess</code> 파일을 사용하여 디렉토리별로 설정을
변경할 수 있다.</p>
</div>
<div id="quickview"><ul id="toc"><li><img alt="" src="../images/down.gif"> <a href="#related">.htaccess 파일</a></li>
<li><img alt="" src="../images/down.gif"> <a href="#what">무엇이며/어떻게 사용하는가</a></li>
<li><img alt="" src="../images/down.gif"> <a href="#when">언제 .htaccess 파일을 사용하나
    (혹은 사용하지 않나)</a></li>
<li><img alt="" src="../images/down.gif"> <a href="#how">어떻게 지시어를 적용하나</a></li>
<li><img alt="" src="../images/down.gif"> <a href="#auth">인증 예제</a></li>
<li><img alt="" src="../images/down.gif"> <a href="#ssi">Server Side Includes 예제</a></li>
<li><img alt="" src="../images/down.gif"> <a href="#cgi">CGI 예제</a></li>
<li><img alt="" src="../images/down.gif"> <a href="#troubleshoot">문제해결</a></li>
</ul></div>
<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif"></a></div>
<div class="section">
<h2 id="related">.htaccess 파일 <a title="Permanent link" href="#related" class="permalink">&para;</a></h2>
    <table class="related"><tr><th>관련된 모듈</th><th>관련된 지시어</th></tr><tr><td><ul><li><code class="module"><a href="../mod/core.html">core</a></code></li><li><code class="module"><a href="../mod/mod_authn_file.html">mod_authn_file</a></code></li><li><code class="module"><a href="../mod/mod_authz_groupfile.html">mod_authz_groupfile</a></code></li><li><code class="module"><a href="../mod/mod_cgi.html">mod_cgi</a></code></li><li><code class="module"><a href="../mod/mod_include.html">mod_include</a></code></li><li><code class="module"><a href="../mod/mod_mime.html">mod_mime</a></code></li></ul></td><td><ul><li><code class="directive"><a href="../mod/core.html#accessfilename">AccessFileName</a></code></li><li><code class="directive"><a href="../mod/core.html#allowoverride">AllowOverride</a></code></li><li><code class="directive"><a href="../mod/core.html#options">Options</a></code></li><li><code class="directive"><a href="../mod/mod_mime.html#addhandler">AddHandler</a></code></li><li><code class="directive"><a href="../mod/core.html#sethandler">SetHandler</a></code></li><li><code class="directive"><a href="../mod/core.html#authtype">AuthType</a></code></li><li><code class="directive"><a href="../mod/core.html#authname">AuthName</a></code></li><li><code class="directive"><a href="../mod/mod_authn_file.html#authuserfile">AuthUserFile</a></code></li><li><code class="directive"><a href="../mod/mod_authz_groupfile.html#authgroupfile">AuthGroupFile</a></code></li><li><code class="directive"><a href="../mod/core.html#require">Require</a></code></li></ul></td></tr></table>
</div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif"></a></div>
<div class="section">
<h2 id="what">무엇이며/어떻게 사용하는가 <a title="Permanent link" href="#what" class="permalink">&para;</a></h2>


    <p><code>.htaccess</code> 파일(혹은 "분산 설정파일")을
    사용하면 디렉토리별로 설정을 변경할 수 있다. 여러 설정 지시어가
    있는 파일을 특정 문서 디렉토리에 두면, 그 디렉토리와 모든
    하위디렉토리에 지시어를 적용한다.</p>

    <div class="note"><h3>주의:</h3>
      <p><code>.htaccess</code> 파일명을 다르게 사용하고 싶다면,
      <code class="directive"><a href="../mod/core.html#accessfilename">AccessFileName</a></code> 지시어를
      사용하여 변경할 수 있다. 예를 들어, <code>.config</code>
      파일명을 사용하려면 서버 설정파일에 다음과 같이 추가한다.</p>

      <div class="example"><p><code>
        AccessFileName .config
      </code></p></div>
    </div>

    <p>일반적으로 <code>.htaccess</code> 파일은 <a href="../configuring.html#syntax">주설정파일</a>과 문법이
    같다. <code class="directive"><a href="../mod/core.html#allowoverride">AllowOverride</a></code>
    지시어가 이 파일에 나올 수 있는 내용을 결정한다. 이 지시어는
    <code>.htaccess</code> 파일에서 허용하는 지시어 분류를 지정한다.
    지시어를 <code>.htaccess</code> 파일에서 사용할 수 있다면,
    해당 지시어 문서의 Override 항목은 지시어를 허용하기위해
    <code class="directive"><a href="../mod/core.html#allowoverride">AllowOverride</a></code>에 사용할
    값을 알려준다.</p>

    <p>예를 들어, <code class="directive"><a href="../mod/core.html#adddefaultcharset">AddDefaultCharset</a></code>
    지시어 문서를 보면 이 지시어를 <code>.htaccess</code> 파일에서
    사용할 수 있다. (지시어 요약에서 사용장소 항목을 보라.)
    <a href="../mod/directive-dict.html#Context">Override</a>
    줄에 <code>FileInfo</code>가 있다. 그래서 이 지시어를
    <code>.htaccess</code> 파일에서 사용하기위해서는 최소한
    <code>AllowOverride FileInfo</code>가 필요하다.</p>

    <div class="example"><h3>예제:</h3><table>
        <tr>
          <td><a href="../mod/directive-dict.html#Context">사용장소:</a></td>
          <td>주서버설정, 가상호스트, directory, .htaccess</td>
        </tr>

        <tr>
          <td><a href="../mod/directive-dict.html#Override">Override:</a></td>
          <td>FileInfo</td>
        </tr>
      </table></div>

    <p>특정 지시어를 <code>.htaccess</code> 파일에서 사용할
    수 있는지 궁금하면 지시어 문서의 사용장소 항목에 ".htaccess"가
    있는지 확인한다.</p>
    </div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif"></a></div>
<div class="section">
<h2 id="when">언제 .htaccess 파일을 사용하나
    (혹은 사용하지 않나) <a title="Permanent link" href="#when" class="permalink">&para;</a></h2>

    <p>일반적으로 주서버파일에 접근할 수 없는 경우가 아니라면
    <code>.htaccess</code> 파일을 사용하면 안된다. 예를 들어,
    사용자 인증이 항상 <code>.htaccess</code> 파일에 있어야
    한다는 것은 잘못 알려진 오해다. 이는 사실이 아니다. 주서버설정에
    사용자 인증 설정을 적을 수 있고, 사실 이러길 권한다.</p>

    <p><code>.htaccess</code> 파일은 컨텐츠 제공자가 디렉토리별로
    서버 설정을 다르게하고 싶지만 서버 시스템에 root 권한이
    없는 경우에 사용한다. 서버 관리자가 설정을 자주 변경하고
    싶지 않은 경우 일반 사용자가 직접 <code>.htaccess</code>
    파일을 수정하도록 허용하는 것이 바람직하다. 예를 들어, 한
    컴퓨터에 여러 사용자 사이트를 서비스하는 ISP에서 사용자가
    자신의 설정을 변경하고 싶은 경우가 그러하다.</p>

    <p>그러나 일반적으로 <code>.htaccess</code> 파일은 가급적
    피해야 한다. <code>.htaccess</code> 파일에서 허용하는 지시어는
    주설정파일의 <code class="directive"><a href="../mod/core.html#directory">&lt;Directory&gt;</a></code> 섹션과 같은 효과가
    있다.</p>

    <p>다음 두가지 큰 이유때문에 <code>.htaccess</code> 파일
    사용을 피해야 한다.</p>

    <p>첫번째는 성능이다. <code class="directive"><a href="../mod/core.html#allowoverride">AllowOverride</a></code>가 <code>.htaccess</code>
    파일을 사용하도록 허용하면, 아파치는 디렉토리마다
    <code>.htaccess</code> 파일을 찾는다. 그래서
    <code>.htaccess</code> 파일을 허용하면 실제로 파일을 사용하지
    않는 경우에도 성능이 떨어진다! 또, <code>.htaccess</code>
    파일은 문서를 요청할때마다 읽어들인다.</p>

    <p>게다가 적용해야 하는 전체 지시어를 모으기위해 아파치는
    모든 상위 디렉토리에서 <code>.htaccess</code> 파일을 찾는다.
    (<a href="#how">어떻게 지시어를 적용하나</a> 절을 참고.)
    그래서 <code>/www/htdocs/example</code> 디렉토리에 있는
    파일을 요청하면, 아파치는 다음 파일들을 찾아야 한다.</p>

    <div class="example"><p><code>
      /.htaccess<br>
      /www/.htaccess<br>
      /www/htdocs/.htaccess<br>
      /www/htdocs/example/.htaccess
    </code></p></div>

    <p>그래서 그 디렉토리에 있는 파일을 접근할 때마다 설정파일이
    전혀 없어도 파일시스템을 4번 더 접근해야 한다.
    (<code>/</code>에서도 <code>.htaccess</code> 파일을 허용한
    경우를 말한다. 보통은 허용하지 않는다.)</p>

    <p>두번째 이유는 보안이다. 사용자에게 서버설정 변경 권한을
    주면 당신이 감당할 수 없는 변화가 일어날 수 있다. 사용자에게
    이런 권한을 줄지 곰곰이 생각하라. 또, 사용자가 원하는 것보다
    적은 권한을 주면 기술지원요청이 들어온다. 사용자에게 가능한
    권한 수준을 명확히 알려라. 사용자에게 <code class="directive"><a href="../mod/core.html#allowoverride">AllowOverride</a></code>를 어떻게 설정하였는지
    정확히 알리고 관련 문서를 제공하면 앞으로 혼란을 피할 수
    있다.</p>

    <p>지시어를 <code>/www/htdocs/example</code> 디렉토리의
    <code>.htaccess</code> 파일을 두는 것과 주서버설정의
    <code>&lt;Directory /www/htdocs/example&gt;</code> Directory
    설정에 두는 것은 완전히 같다.</p>

    <p><code>/www/htdocs/example</code>에 있는
    <code>.htaccess</code> 섹션:</p>

    <div class="example"><h3><code>/www/htdocs/example</code>에 있는
    .htaccess 파일 내용</h3><p><code>
        AddType text/example .exm
    </code></p></div>

    <div class="example"><h3><code>httpd.conf</code> 파일에 있는 섹션</h3><p><code>
      &lt;Directory /www/htdocs/example&gt;<br>
      <span class="indent">
        AddType text/example .exm<br>
      </span>
      &lt;/Directory&gt;
    </code></p></div>

    <p>그러나 파일을 요청할 때마다 설정을 읽지않고 아파치가
    시작할때 한번만 설정을 읽기때문에 같은 설정을 서버설정파일에
    사용하면 성능이 더 빠르다.</p>

    <p><code class="directive"><a href="../mod/core.html#allowoverride">AllowOverride</a></code> 지시어를
    <code>none</code>으로 설정하면 <code>.htaccess</code> 파일을
    완전히 사용할 수 없다.</p>

    <div class="example"><p><code>
      AllowOverride None
    </code></p></div>
</div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif"></a></div>
<div class="section">
<h2 id="how">어떻게 지시어를 적용하나 <a title="Permanent link" href="#how" class="permalink">&para;</a></h2>

    <p><code>.htaccess</code> 파일을 발견한 디렉토리와 그 디렉토리의
    모든 하위디렉토리에 <code>.htaccess</code> 파일에 있는 설정
    지시어를 적용한다. 그래서 상위디렉토리의 <code>.htaccess</code>
    파일을 주의해야 한다. 발견한 순서로 지시어를 적용한다. 특정
    디렉토리에 있는 <code>.htaccess</code> 파일은 상위디렉토리에
    있는 <code>.htaccess</code> 파일의 지시어를 무효로 만들
    수 있고, 상위디렉토리에 있는 지시어는 더 상위디렉토리 혹은
    주설정파일에 있는 지시어를 무효로 만들 수 있다.</p>

    <p>예제:</p>

    <p><code>/www/htdocs/example1</code> 디렉토리에 다음과 같은
    <code>.htaccess</code> 파일이 있다.</p>

    <div class="example"><p><code>
       Options +ExecCGI
    </code></p></div>

    <p>(주의: <code>.htaccess</code> 파일에 "<code class="directive"><a href="../mod/core.html#options">Options</a></code>" 지시어를 사용하려면
    "<code>AllowOverride Options</code>"가 필요하다.)</p>

    <p><code>/www/htdocs/example1/example2</code> 디렉토리에는
    다음과 같은 <code>.htaccess</code> 파일이 있다.</p>

    <div class="example"><p><code>
       Options Includes
    </code></p></div>

    <p>이 두번째 <code>.htaccess</code> 파일의
    <code>Options Includes</code>가 이전 설정을 완전히 무효로
    만들기때문에 <code>/www/htdocs/example1/example2</code>
    디렉토리는 CGI 실행을 허용하지 않는다.</p>
</div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif"></a></div>
<div class="section">
<h2 id="auth">인증 예제 <a title="Permanent link" href="#auth" class="permalink">&para;</a></h2>

    <p>인증 방법을 알기위해 바로 이곳부터 읽는다면 주의할 것이
    있다. 암호 인증을 하려면 <code>.htaccess</code> 파일이
    필요하다는 오해가 널리 퍼져있다. 이는 사실이 아니다.
    주설정파일의 <code class="directive"><a href="../mod/core.html#directory">&lt;Directory&gt;</a></code> 섹션에 인증 지시어를
    두는 것이 더 권장하는 방법이고, 서버의 주설정파일을 수정할
    수 없는 경우에만 <code>.htaccess</code> 파일을 사용해야
    한다. 언제 <code>.htaccess</code> 파일을 사용해야 하는지와
    사용하지 말아야 하는지는 <a href="#when">위에서</a>
    설명하였다.</p>

    <p>앞에서 말했지만 아직도 <code>.htaccess</code> 파일이
    필요하다고 생각되면 아래 설정이 도움이 될 것이다.</p>

    <p><code>.htaccess</code> 파일 내용.</p>

    <div class="example"><p><code>
      AuthType Basic<br>
      AuthName "Password Required"<br>
      AuthUserFile /www/passwords/password.file<br>
      AuthGroupFile /www/passwords/group.file<br>
      Require Group admins
    </code></p></div>

    <p>이 지시어가 동작하기위해서는
    <code>AllowOverride AuthConfig</code> 지시어가 필요함을
    명심하라.</p>

    <p>인증과 권한부여에 대한 자세한 설명은 <a href="auth.html">인증
    투토리얼</a>을 보길 바란다.</p>
</div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif"></a></div>
<div class="section">
<h2 id="ssi">Server Side Includes 예제 <a title="Permanent link" href="#ssi" class="permalink">&para;</a></h2>

    <p>또다른 일반적인 <code>.htaccess</code> 파일의 용도는
    특정 디렉토리에서 Server Side Includes를 가능하게 만드는
    것이다. 원하는 디렉토리의 <code>.htaccess</code> 파일에
    다음과 같은 설정 지시어를 사용하면 된다.</p>

    <div class="example"><p><code>
       Options +Includes<br>
       AddType text/html shtml<br>
       AddHandler server-parsed shtml
    </code></p></div>

    <p>이 지시어가 동작하려면 <code>AllowOverride Options</code>와
    <code>AllowOverride FileInfo</code>가 모두 필요함을 명심하라.</p>

    <p>server-side includes에 대한 자세한 설명은 <a href="ssi.html">SSI 투토리얼</a>을 보길 바란다.</p>
</div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif"></a></div>
<div class="section">
<h2 id="cgi">CGI 예제 <a title="Permanent link" href="#cgi" class="permalink">&para;</a></h2>

    <p>마지막으로 <code>.htaccess</code> 파일을 사용하여 특정
    디렉토리에서 CGI 프로그램 실행을 허용하고 싶다면, 다음과
    같은 설정을 사용한다.</p>

    <div class="example"><p><code>
       Options +ExecCGI<br>
       AddHandler cgi-script cgi pl
    </code></p></div>

    <p>혹은 이 디렉토리에 있는 모든 파일을 CGI 프로그램으로
    처리하고 싶다면 다음과 같은 설정도 가능하다.</p>

    <div class="example"><p><code>
       Options +ExecCGI<br>
       SetHandler cgi-script
    </code></p></div>

    <p>이 지시어가 동작하려면 <code>AllowOverride Options</code>와
    <code>AllowOverride FileInfo</code>가 모두 필요함을 명심하라.</p>

    <p>CGI 프로그래밍과 설정에 대한 자세한 설명은 <a href="cgi.html">CGI 투토리얼</a>을 보길 바란다.</p>

</div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif"></a></div>
<div class="section">
<h2 id="troubleshoot">문제해결 <a title="Permanent link" href="#troubleshoot" class="permalink">&para;</a></h2>

    <p><code>.htaccess</code> 파일에 둔 설정 지시어가 원하는
    기능을 하지 않는 경우 여러가지 이유가 있을 수 있다.</p>

    <p>가장 일반적인 문제는 설정 지시어를 가능하게 만드는 <code class="directive"><a href="../mod/core.html#allowoverride">AllowOverride</a></code>를 설정하지 않은
    경우다. 문제가 되는 파일 영역에 <code>AllowOverride None</code>이
    없는지 확인한다. <code>.htaccess</code> 파일을 아무렇게나 
    적은 다음 페이지를 다시 접근하여 쉽게 검사해볼 수 있다.
    서버 오류가 나오지 않으면 거의 확실히
    <code>AllowOverride None</code>을 사용한 경우다.</p>

    <p>반대로 문서에 접근할때 서버 오류가 발생하면 아파치 오류로그를
    살펴봐라. 아마도 <code>.htaccess</code> 파일에 있는 지시어를
    허용하지 않는다고 할 것이다. 아니고 문법 오류가 있다면 오류를
    고친다.</p>

</div></div>
<div class="bottomlang">
<p><span>가능한 언어: </span><a href="../en/howto/htaccess.html" hreflang="en" rel="alternate" title="English">&nbsp;en&nbsp;</a> |
<a href="../es/howto/htaccess.html" hreflang="es" rel="alternate" title="Espa&ntilde;ol">&nbsp;es&nbsp;</a> |
<a href="../fr/howto/htaccess.html" hreflang="fr" rel="alternate" title="Fran&ccedil;ais">&nbsp;fr&nbsp;</a> |
<a href="../ja/howto/htaccess.html" hreflang="ja" rel="alternate" title="Japanese">&nbsp;ja&nbsp;</a> |
<a href="../ko/howto/htaccess.html" title="Korean">&nbsp;ko&nbsp;</a> |
<a href="../pt-br/howto/htaccess.html" hreflang="pt-br" rel="alternate" title="Portugu&ecirc;s (Brasil)">&nbsp;pt-br&nbsp;</a></p>
</div><div id="footer">
<p class="apache">Copyright 2026 The Apache Software Foundation.<br>Licensed under the <a href="https://www.apache.org/licenses/LICENSE-2.0">Apache License, Version 2.0</a>.</p>
<p class="menu"><a href="../mod/">모듈</a> | <a href="../mod/quickreference.html">지시어들</a> | <a href="https://cwiki.apache.org/confluence/display/httpd/FAQ">FAQ</a> | <a href="../glossary.html">용어</a> | <a href="../sitemap.html">사이트맵</a> | <a href="https://bz.apache.org/bugzilla/enter_bug.cgi?product=Apache%20httpd-2">Report a bug</a></p></div><script><!--//--><![CDATA[//><!--
if (typeof(prettyPrint) !== 'undefined') {
    prettyPrint();
}
var langToggle = document.querySelector('.lang-toggle');
var topLang = document.querySelector('.toplang');
if (langToggle && topLang) {
    langToggle.addEventListener('click', function() { topLang.classList.toggle('open'); });
}
var qv = document.getElementById('quickview');
if (qv) {
    document.body.appendChild(qv);
    var qvBtn = document.createElement('button');
    qvBtn.className = 'qv-toggle';
    qvBtn.setAttribute('aria-label', 'Toggle page navigation');
    qvBtn.innerHTML = '&#9776;';
    document.body.appendChild(qvBtn);
    qvBtn.addEventListener('click', function() {
        var isOpen = qv.classList.toggle('open');
        if (isOpen) {
            qv.style.top = window.scrollY + 10 + 'px';
        }
    });
    window.addEventListener('scroll', function() { qv.classList.remove('open'); });
}
//--><!]]></script>
</body></html>