본문 바로가기
카테고리 없음

.htaccess 사용법

by 잘먹는 개발자 에단 2024. 9. 19.

1. 권한 설정 및 접근 제어

- .htaccess 파일을 사용하여 특정 디렉토리나 파일에 대한 접근을 제한한다.

- 이를 통해서 보안을 강화할 수 있다. 

 

예시 : 특정 ip만 접근 허용

# 모든 사용자에게 접근을 차단하고 특정 ip만 허용한다.
Order Deny, Allow
Deny from all
Allow from 123.456.789.000

ㄴ 모든 ip 주소의 접근을 차단하고, 지정된 ip 주소 (123....) 만 해당 디렉토리에 접근할 수 있도록 설정한다.

ㄴ 이를 통해서 특정 관리자나 팀만 특정 리소스에 접근할 수 있게 할 수 있다. 

 

 

예시 : 기본 인증 설정

# 이 디렉토리에 접근하기 전에 사용자 인증을 요구
AuthType Basic
AuthName "Restricted Area"
AuthUserFile /path/to/.htpasswd
Require valid-user

ㄴ 위 코드는 접근할 때 사용자 이름과 비밀번호를 요구하는 기본인증을 설정한다.

ㄴ AuthUserFile 경로에 있는 .htpasswd 파일에 저장된 사용자 자격증명으로 인증을 처리한다.

ㄴ 이 방식은 비밀번호로 특정 콘텐츠에 대한 접근을 제한할 때 사용한다.

 

 

 

2. URL 재작성 

- URL을 보다 간결하고 읽기 쉽게 만들어나 리다이렉션할 때 .htaccess의 mod_rewrite 기능을 사용한다.

 

예시 : 간단한 URL 재작성

RewriteEngine On
RewriteRule ^about-us$ about.html [L]

ㄴ 사용자가 /about-us로 요청하면 실제 파일인 about.html을 로드하게 한다. 

ㄴ 더 짧고 직관적인 URL을 제공하여 SEO에 도움이 된다.

 

예시 : http에서 https로 리다이렉션

RewriteEngine On
RewriteCond %{HTTPS} !=on
RewriteRult ^ https://%{HTTP_HOST}%{REQUEST_URI} [L,R = 301]

ㄴ 위 코드는 모든 HTTP 요청을 HTTPS로 리다이렉션한다.

ㄴ 이를 통해서 보안이 필요한 페이지에 SSL 암호화된 연결을 강제할 수 있다.

ㄴ 사용자는 URL에 직접 HTTPS를 입력하지 않더라도 안전하게 접속할 수 있다. 

 

 

3. 디렉토리 인덕스 설정

- 디렉토리 내에 index.html이나 index.php와 같은 파일이 없을 때 브라우저에서 해당 디렉토리의 파일 목록이 표시될 수 있다.

- 이를 방지하려면 디렉토리 인덱싱을 비활성화할 수 있다.

 

예시 : 디렉토리 인덱스 비활성화

Options -Indexes

ㄴ 이 설정은 해당 디렉토리의 파일 목록을 비활성화한다. 

ㄴ 보안적으로 중요하며, 서버의 중요한 파일들이 노출되지 않도록 할 수 있다.

 

예시 : 인덱스 파일 지정

DirectoryIndex index.html

ㄴ 디렉토리로 접근할 때 기본적으로 index.html 파일을 불러오도록 설정한다.

ㄴ 만약에 index.html파일이 없으면 서버는 다른 기본 파일을 찾지 않는다. 

 

 

4. SSL 강제적용

- SSL은 웹사이트의 보안에 중요한 요소이다. 

- .htaccess 파일을 통해 http로 접속하는 사용자를 자동으로 https로 리다이렉트 한다.

 

예시 : HTTPS 강제적용

RewriteEngine On
RewriteCond %{HTTPS} off
RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI} [L,R = 301]

ㄴ HTTP로 요청이 들어왔을 때 자동으로 HTTPS로 리다이렉트 한다.

ㄴ 사용자의 데이터를 암호화하여 더 안전하게 전송할 수 있도록 한다. 

 

 

 

5. 캐시 관리

- 웹 브라우저에 데이터를 캐시하는 설정을 통해서 페이지 로딩 속도를 높이고, 서버의 부하를 줄인다.

- 캐시 : 브라우저가 웹 리소스를 일정 기간동안 저장하여, 다시 다운로드할 필요 없이 로컬에서 불러오는 기능

<IfModule mod_expires.c>
    ExpiresActive On
    ExpiresByType image/jpg "access plus 1 month"
    ExpiresByType image/jpeg "access plus 1 month"
    ExpiresByType image/gif "access plus 1 month"
    ExpiresByType image/png "access plus 1 month"
    ExpiresByType text/css "access plus 1 week"
    ExpiresByType application/pdf "access plus 1 month"
    ExpiresByType text/x-javascript "access plus 1 week"
    ExpiresByType application/x-shockwave-flash "access plus 1 month"
    ExpiresByType image/x-icon "access plus 1 year"
    ExpiresDefault "access plus 2 days"
</IfModule>

ㄴ 특정 파일 유형에 대해 캐시 만료 시간을 지정한다.

ㄴ 이를 통해 사용자는 같은 파일을 로드할 때 시간을 절약하고, 서버는 부하가 줄어서 좋다.