Apache의 구성 파일 .htaccess는 어렵고 중요한 포인트입니다. 저는 Redirect 메소드가 mod_rewrite에 속한다고 늘 생각해왔고, 사용할 때 헷갈립니다. 오늘 아주 좋은 튜토리얼을 발견했고, 배우면서 몇 가지 생각을 적어보았습니다.
업데이트됨: 일부 사소한 문제를 지속적으로 수정합니다.
출처: .htaccess에 대한 종합 가이드
공식 참조: 지침 빠른 참조
1 소개 소개
파일 이름.htaccess 속성 644(RW-R–R–)
htaccess는 해당 디렉터리의 모든 하위 디렉터리에 영향을 미칩니다. 대부분의 콘텐츠는 한 줄에 보관해야 하며 그렇지 않으면 오류가 발생합니다.
2 오류 문서 오류 문서
공식 문서: ErrorDocument 지시문
ErrorDocument 코드 문서
예
오류문서 400 /errors/badrequest.html
오류 문서 404 http://yoursite/errors/notfound.html
오류 문서 401 "승인 필요"
(콘텐츠 뒷부분에 나타나는 큰따옴표는 "로 이스케이프해야 합니다.)
일반적인 HTTP 상태 코드
성공적인 클라이언트 요청
200 OK
201 생성됨
202 승인됨
203 신뢰할 수 없는 정보
204 내용 없음
205 콘텐츠 재설정
206 부분 콘텐츠
클라이언트 요청이 리디렉션되었습니다.
300개의 객관식
301 영구 이전
302 임시 이전됨
303 기타 보기
304 수정되지 않음
305 프록시 사용
클라이언트 요청 오류
400 잘못된 요청
401 인증 필요
402 결제 필요(아직 사용되지 않음)
403 금지됨
404 찾을 수 없음
405 메서드가 허용되지 않음
406 허용되지 않음(인코딩)
407 프록시 인증 필요
408 요청 시간이 초과되었습니다.
409 충돌하는 요청
410 곤
411 콘텐츠 길이 필요
412 전제조건 실패
413 요청 엔터티가 너무 깁니다.
414 요청 URI가 너무 깁니다.
415 지원되지 않는 미디어 유형
서버 오류
500 내부 서버 오류
501 구현되지 않음
502 나쁜 게이트웨이
503 서비스를 사용할 수 없습니다.
504 게이트웨이 시간 초과
505 HTTP 버전은 지원되지 않습니다.
3 비밀번호 보호 비밀번호 보호
공식 문서: 인증, 권한 부여 및 액세스 제어
비밀번호 파일이 .htpasswd라고 가정합니다.
AuthUserFile /usr/local/safedir/.htpasswd (여기서 전체 경로 이름을 사용해야 함)
인증 이름 비밀번호 입력
인증 유형 기본
두 가지 일반적인 확인 방법:
사용자windix 필요
(windix 사용자만 로그인이 가능합니다)
유효한 사용자 필요
(법적 사용자라면 누구나 로그인 가능)
팁: htpasswd 명령(아파치에 포함됨)을 사용하여 비밀번호 파일을 생성하는 방법
1세대를 위해서는 비밀번호 파일을 생성해야 합니다.
htpasswd -c .htpasswd 사용자1
나중에 새 사용자 추가
htpasswd .htpasswd 사용자2
4 htaccess를 통해 SSI 활성화 htaccess를 통해 SSI(Server Side Inclusive) 기능을 허용합니다.
AddType 텍스트/html .shtml
AddHandler 서버 구문 분석 .shtml
옵션 색인 FollowSymLinks 포함
디렉토리색인 index.shtml index.html
5 IP를 통한 사용자 차단 IP를 통한 사용자 접속 차단
주문 허용, 거부
123.45.6.7에서 거부
12.34.5부터 거부(전체 클래스 C 주소)
모두에게 허용하다
6 추천인에 의한 사용자/사이트 차단 추천인에 따른 사용자/사이트 차단
mod_rewrite 모듈 필요
예 1. 단일 리퍼러 차단: badsite.com
RewriteEngine 켜기
# 옵션 +FollowSymlinks
RewriteCond %{HTTP_REFERER} badsite.com [NC]
RewriteRule .* - [F]
예 2. 여러 리퍼러 차단: badsite1.com, badsite2.com
RewriteEngine 켜기
# 옵션 +FollowSymlinks
RewriteCond %{HTTP_REFERER} badsite1.com [NC,OR]
RewriteCond %{HTTP_REFERER} badsite2.com
RewriteRule .* - [F]
[NC] - 대소문자를 구분하지 않음
[F] - 403 금지됨
위 코드에서는 "Options +FollowSymlinks" 문이 주석 처리되어 있습니다. 서버가 httpd.conf 섹션에 FollowSymLinks를 설정하지 않은 경우 이 문장을 추가해야 합니다. 그렇지 않으면 "500 내부 서버 오류" 오류가 발생합니다.
7 불량 봇 및 사이트 리퍼 차단(일명 오프라인 브라우저) 불량 봇 및 오프라인 브라우저 차단
mod_rewrite 모듈 필요
예를 들어, 스팸 이메일 주소를 수집하는 일부 크롤러와 robots.txt를 준수하지 않는 크롤러(예: Baidu?)
HTTP_USER_AGENT를 기준으로 판단할 수 있습니다.
(그러나 자신의 에이전트를 "Mozilla/4.0(호환; MSIE 5.5; Windows NT 5.0)"로 설정한 "Zhongsou zhongsou.com"과 같은 더 뻔뻔한 사람들도 있습니다. 그들은 너무 불량하고 아무것도 할 수 없습니다.)
RewriteEngineOn
RewriteCond %{HTTP_USER_AGENT} ^BlackWidow [OR]
RewriteCond %{HTTP_USER_AGENT} ^Bot mailto:[email protected] [또는]
RewriteCond %{HTTP_USER_AGENT} ^ChinaClaw [OR]
RewriteCond %{HTTP_USER_AGENT} ^Custo [OR]
RewriteCond %{HTTP_USER_AGENT} ^DISCo [OR]
RewriteCond %{HTTP_USER_AGENT} ^다운로드 악마 [또는]
RewriteCond %{HTTP_USER_AGENT} ^eCatch [OR]
RewriteCond %{HTTP_USER_AGENT} ^EirGrabber [OR]
RewriteCond %{HTTP_USER_AGENT} ^EmailSiphon [OR]
RewriteCond %{HTTP_USER_AGENT} ^EmailWolf [또는]
RewriteCond %{HTTP_USER_AGENT} ^Express WebPictures [또는]
RewriteCond %{HTTP_USER_AGENT} ^ExtractorPro [또는]
RewriteCond %{HTTP_USER_AGENT} ^EyeNetIE [또는]
RewriteCond %{HTTP_USER_AGENT} ^FlashGet [OR]
RewriteCond %{HTTP_USER_AGENT} ^GetRight [OR]
RewriteCond %{HTTP_USER_AGENT} ^GetWeb!
RewriteCond %{HTTP_USER_AGENT} ^Go!Zilla [또는]
RewriteCond %{HTTP_USER_AGENT} ^앞서 해 보세요 [OR]
RewriteCond %{HTTP_USER_AGENT} ^GrabNet [OR]
RewriteCond %{HTTP_USER_AGENT} ^Grafula [OR]
RewriteCond %{HTTP_USER_AGENT} ^HMView [OR]
RewriteCond %{HTTP_USER_AGENT} HTTrack [NC,OR]
RewriteCond %{HTTP_USER_AGENT} ^이미지 스트리퍼 [OR]
RewriteCond %{HTTP_USER_AGENT} ^Image Sucker [또는]
RewriteCond %{HTTP_USER_AGENT} Indy 라이브러리 [NC,OR]
RewriteCond %{HTTP_USER_AGENT} ^InterGET [OR]
RewriteCond %{HTTP_USER_AGENT} ^Internet Ninja [OR]
RewriteCond %{HTTP_USER_AGENT} ^JetCar [또는]
RewriteCond %{HTTP_USER_AGENT} ^JOC Web Spider [OR]
RewriteCond %{HTTP_USER_AGENT} ^larbin [OR]
RewriteCond %{HTTP_USER_AGENT} ^LeechFTP [또는]
RewriteCond %{HTTP_USER_AGENT} ^Mass 다운로더 [또는]
RewriteCond %{HTTP_USER_AGENT} ^MIDown 도구 [또는]
RewriteCond %{HTTP_USER_AGENT} ^Mister PiX [또는]
RewriteCond %{HTTP_USER_AGENT} ^Navroad [OR]
RewriteCond %{HTTP_USER_AGENT} ^NearSite [OR]
RewriteCond %{HTTP_USER_AGENT} ^NetAnts [OR]
RewriteCond %{HTTP_USER_AGENT} ^NetSpider [OR]
RewriteCond %{HTTP_USER_AGENT} ^Net 뱀파이어 [OR]
RewriteCond %{HTTP_USER_AGENT} ^NetZIP [OR]
RewriteCond %{HTTP_USER_AGENT} ^Octopus [OR]
RewriteCond %{HTTP_USER_AGENT} ^오프라인 탐색기 [또는]
RewriteCond %{HTTP_USER_AGENT} ^오프라인 네비게이터 [또는]
RewriteCond %{HTTP_USER_AGENT} ^PageGrabber [또는]
RewriteCond %{HTTP_USER_AGENT} ^Papa Foto [또는]
RewriteCond %{HTTP_USER_AGENT} ^pavuk [또는]
RewriteCond %{HTTP_USER_AGENT} ^pcBrowser [또는]
RewriteCond %{HTTP_USER_AGENT} ^RealDownload [또는]
RewriteCond %{HTTP_USER_AGENT} ^ReGet [OR]
RewriteCond %{HTTP_USER_AGENT} ^SiteSnagger [또는]
RewriteCond %{HTTP_USER_AGENT} ^SmartDownload [또는]
RewriteCond %{HTTP_USER_AGENT} ^SuperBot [OR]
RewriteCond %{HTTP_USER_AGENT} ^SuperHTTP [또는]
RewriteCond %{HTTP_USER_AGENT} ^Surfbot [또는]
RewriteCond %{HTTP_USER_AGENT} ^tAkeOut [또는]
RewriteCond %{HTTP_USER_AGENT} ^Teleport Pro [OR]
RewriteCond %{HTTP_USER_AGENT} ^VoidEYE [또는]
RewriteCond %{HTTP_USER_AGENT} ^Web Image Collector [OR]
RewriteCond %{HTTP_USER_AGENT} ^Web Sucker [또는]
RewriteCond %{HTTP_USER_AGENT} ^WebAuto [OR]
RewriteCond %{HTTP_USER_AGENT} ^WebCopier [또는]
RewriteCond %{HTTP_USER_AGENT} ^WebFetch [OR]
RewriteCond %{HTTP_USER_AGENT} ^WebGo IS [OR]
RewriteCond %{HTTP_USER_AGENT} ^WebLeacher [OR]
RewriteCond %{HTTP_USER_AGENT} ^WebReaper [또는]
RewriteCond %{HTTP_USER_AGENT} ^WebSauger [또는]
RewriteCond %{HTTP_USER_AGENT} ^Website eXtractor [OR]
RewriteCond %{HTTP_USER_AGENT} ^Website Quester [또는]
RewriteCond %{HTTP_USER_AGENT} ^WebStripper [또는]
RewriteCond %{HTTP_USER_AGENT} ^WebWhacker [OR]
RewriteCond %{HTTP_USER_AGENT} ^WebZIP [또는]
RewriteCond %{HTTP_USER_AGENT} ^Wget [OR]
RewriteCond %{HTTP_USER_AGENT} ^Widow [OR]
RewriteCond %{HTTP_USER_AGENT} ^WWWOFFLE [OR]
RewriteCond %{HTTP_USER_AGENT} ^Xaldon WebSpider [OR]
RewriteCond %{HTTP_USER_AGENT} ^Zeus
RewriteRule ^.* - [F,L]
[F] - 403 금지됨
[엘] - ?
8 기본 디렉터리 페이지 변경 기본 디렉터리 페이지 변경
DirectoryIndex index.html index.php index.cgi index.pl
9 리디렉션
단일 파일
/old_dir/old_file.html http://yoursite.com/new_dir/new_file.html 리디렉션
전체 디렉토리
/old_dir http://yoursite.com/new_dir 리디렉션
효과: 디렉토리 이동과 동일
http://yoursite.com/old_dir -> http://yoursite.com/new_dir
http://yoursite.com/old_dir/dir1/test.html -> http://yoursite.com/new_dir/dir1/test.html
Tip: 사용자 디렉터리 사용 시 Redirect가 리디렉션되지 않는 문제에 대한 해결 방법
http://mysite.com/~windix와 같은 Apache의 기본 사용자 디렉터리를 사용하고 http://mysite.com/~windix/jump로 리디렉션하려는 경우 다음 리디렉션이 수행되지 않음을 알 수 있습니다. 일하다:
http://www.google.com 리디렉션/점프
올바른 방법은 다음과 같이 변경하는 것입니다.
/~windix/jump http://www.google.com 리디렉션
(출처: "사이트"의 .htaccess 리디렉션이 리디렉션되지 않음: 이유는 무엇입니까?)
10 .htaccess 파일 보기 방지 .htaccess 파일 보기 방지
주문 허용, 거부
모두를 거부하다
11 MIME 유형 추가 MIME 유형 추가
AddType 애플리케이션/x-shockwave-flash swf
팁: 유형을 application/octet-stream으로 설정하면 다운로드하라는 메시지가 표시됩니다.
12 이미지 및 기타 파일 형식의 핫링크 방지 핫링크 방지
mod_rewrite 모듈 필요
RewriteEngine 켜기
RewriteCond %{HTTP_REFERER} !^$
RewriteCond %{HTTP_REFERER} !^http://(www/.)?mydomain.com/.*$ [NC]
RewriteRule .(gif|jpg|js|css)$ - [F]
분석:
HTTP_REFERER가 비어 있지 않고(소스가 직접 연결되지 않은 다른 사이트임) HTTP_REFERER가 (www.)mydomain.com으로 시작하지 않는 경우(대소문자 [NC] 무시)(소스가 이 사이트가 아님)
.gif/.jpg/.js/.css로 끝나는 모든 파일에 대해 403 금지 오류 [F]가 발생합니다.
다음 예에서는 대체 이미지를 보여주므로 응답을 지정할 수도 있습니다.
RewriteRule .(gif|jpg)$ [R,L]
[R] - 리디렉션
[L] - 링크
13 디렉토리 목록 방지 디렉토리 목록 표시 방지
색인무시*
IndexIgnore *.jpg *.gif
팁:
디렉터리 목록 표시 허용: 옵션 +색인
성직자 목록 표시 비활성화: 옵션 - 색인
프롬프트 정보 표시: 헤더 파일 HEADER, 바닥글 파일 README