Action disabled: source

.htaccess 설정..

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

http://httpd.apache.org/docs/2.2/ko/howto/htaccess.html

설명

RewriteRule

  .     =>  ?과 같습니다. 무엇이든 하나의 문자를 뜻합니다. A가 될수도 있고 Z가 될수 있다.
반드시 한글자.
  [A]   =>  역시 하나의 문자가 올수 있다는 뜻. ex) a[eo]t => aot 혹은 aet
  [^A]  =>  문자는 올수 없다는 뜻~ A부터 Z까지~

  ?     =>  0개 또는 1개의 텍스트.
  *     =>  0개 또는 1개 이상의 텍스트.
  +     =>  1개 이상의 텍스트. 0은 될수 없다.

그룹

  (텍스트)  =>   위의 텍스트에 속한 세가지를 조합하여 쓸수 있다
  예로 (..)는 두글자라는 거지요 ^^
  몇번째 그룹이냐에 따라서 위에 설명한 $N의 변수로 불러 쓸수있니다.

Anchors

  ^     =>   줄의 시작을 나타낸다 ex) ^a => a로 시작
  $     =>   줄의 끝을 말한다. ex) a$ => a로 끝

특수 문자 처리

프로그래밍을 하면서 그 프로그램 내부 코드나 명령어로 쓰이고 있어서 쓰지 못하는 문자가 많다. 여기서도 마찬가지이다. 하지만 어디서나 존재하는 Escape문자 있으니 여기서는 "\"(역슬래쉬(원))표시가 쓰인다. 보통 .이 잘못쓰일 것을 대비하여 \.로 쓰는게 보통이다.

예 : gnunix.co.kr ⇒ gnunix\.co\.kr

주로 점.이나 대괄호[], 괄호()등에 쓰인다. 이는 Cond에만 적용되는 이야기이다.

RewriteCond

그곳 Test 스트링 부분에 $N이나 %N이 쓰인다면 역참조 기능을 제공하게된다. 여기서 N은 (1⇐N⇐9)이다.

  • $N의 경우 현재 처리되고있는 Rule에서 가르키고 있는 패턴이 그룹으로 묶여 제공된다. $N을 하나의 변수처럼 사용할 수 있게되는것이다.
  • 괄호로 그룹을 묶은 부분이 변수로 사용된다.
  RewriteCond   %{HTTP_HOST}             ^[^.]+\.gnunix\.co\.kr$
  RewriteRule   ^(.+)                     %{HTTP_HOST}$1 [C]
  RewriteRule   ^([^.]+)\.gnunix\.co\.kr(.*)   /home/$1/htdocs$2

위 예제의 경우 도메인 앞의 URI를 $1로 그 뒤 경로를 $2로 지정하여 특정 디렉토리의 내용을 읽도록 하는 내용이다. 이것을 짧게 한줄로 고쳐보자면

  RewriteRule ^([^.]+)\.gnunix\.co\.kr(.*) /home/$1/htdocs$2

%N은 현재 처리중인 Cond에서 가르키고있는 조건과 일치한 패턴이 그룹으로 묶여 제공된다.

CondPattern

CondPattern에서 쓰이는 내부 명령어? 특수명령어?등을 알아보도록하자

  -d     =>     디렉토리를 뜻한다.
  결론적으로 Test스트링이 디렉토리를 가리키거나 포함하고 있을때 처리된다.
  -f     =>     파일을 뜻한다.
  Test스트링이 파일을 가리키거나 포함하고 있을때 처리된다.
  -l     =>     심볼릭링크를 뜻한다.
  Test스트링이 심볼릭링크를 가리키거나 포함하고 있을때 처리된다.
  느낌표(!)는 부정을 뜻한다.
  RewriteEngine On
  RewriteCond %{REQUEST_FILENAME} !-f
  RewriteCond %{REQUEST_FILENAME} !-d
  RewriteRule ^(.*)$ http://test.gnunix.co.kr/$1

위의 예제는 Request내용이 디렉토리나 파일을 가르키고 있지 않을 경우 저쪽 사이트로 돌리라는 뜻. ^^ $1로 하위주소는 유지하려하고 있습니다 ^^

Flag

라인마다 Flag라 불리우는 깃발을 달수가 있습니다. 일종의 옵션으로 작용합니다 ^^

  F     =>   금지(forbidden)...403에러 Forbidden페이지로 된다.
  L     =>   이것이 마지막.. Last라는 뜻입니다. 위의 Cond들은 여기까지만 적용된다.
             아래부터는 새로 시작.
  N     =>   새로운 Rule이 시작된다는 깃발.
  QSA   =>   전달할 값이 있으면, 붙여서 넘겨준다. 
  NE    =>   Out될 값에 특수문자가 HexCode로 되어 포함되어있는경우
  R     =>   전환 (redirect) 리다이렉션. 무조건 넘긴다. 뒤 주소로 넘긴다는 뜻이지요 ^^
  NC    =>   대소문자 구별없다는 뜻.대소문자 무시
  OR    =>   프로그래밍의 or와 비슷하다.

아래를 참고하시죠 ^^

  RewriteCond %{REMOTE_HOST}  ^gnunix.*  [OR]
  RewriteCond %{REMOTE_HOST}  ^<a href="#" class="key1"
onclick="openKeyword('/keylog/GNUNIX'); return false">GNUNIX</a>.*  [OR]
  RewriteCond %{REMOTE_HOST}  ^INKOREAGUY.* [NC]
  RewriteRule ^(.*)$ http://www.gnunix.co.kr/$1 [R,L]

gnunix나 GNUNIX나 INKOREAGUY나 inkoreaguy로부터 접속한 접속에 대하여 리다이렉트한다. http://www.gnunix.co.kr/ 로 접속하게된다. 보통 IP주소를 적게되겠다.

예제

www 제거

RewriteEngine On
RewriteCond %{HTTP_HOST} ^www.openwiki.co.kr [NC]
RewriteRule ^(.*)$ http://openwiki.co.kr/$1 [L,R=301] 

캐쉬 설정으로 트래픽 절약

sudo a2enmod expires        # Expire 모드를 켜자...
sudo service apache2 restart   # 아파치 재시작
#이미지 캐쉬 설정...2592000초 (한달)
ExpiresActive On
ExpiresByType image/gif A2592000 
ExpiresByType image/jpg A2592000 
ExpiresByType image/jpeg A2592000 
ExpiresByType image/png A2592000
<IfModule mod_expires.c>
ExpiresActive On

ExpiresByType image/gif A2592000 
ExpiresByType image/jpg A2592000 
ExpiresByType image/jpeg A2592000 
ExpiresByType image/png A2592000 

</IfModule>
<ifmodule mod_expires.c>
<Filesmatch "\.(jpg|jpeg|png|gif|js|css|swf|ico|woff|mp3)$">
    ExpiresActive on
    ExpiresDefault "access plus 2 days"
</Filesmatch>
</ifmodule>

재시작 후 curl 명령으로 확인할 수 있습니다.

curl --head http://m.vaslor.net/bg_.jpg
HTTP/1.1 200 OK
Date: Fri, 10 May 2013 15:14:44 GMT
Server: Apache/2.2.22 (Ubuntu)
Last-Modified: Thu, 11 Oct 2012 15:39:23 GMT
ETag: "24229-11346-4cbca60246418"
Accept-Ranges: bytes
Content-Length: 70470
Cache-Control: max-age=2592000
Expires: Sun, 09 Jun 2013 15:14:44 GMT
Content-Type: image/jpeg

특정 주소 차단

접근 제어를 원하는 웹 접근 디렉토리에 .htaccess 파일을 생성함. 접근제어는 IP, IP 범위, 호스트네임, 환경 변수를 이용할수 있다.

스팸게시물을 올리는 아이피(4.4.4.4)가 있어 이를 차단하고 싶다면 간단히 .htaccess 파일에

deny from 4.4.4.4

를 추가해 주면 된다. 4.4.4.4 아이피에서 접근하게되면 HTTP 403 접근 권한 없음 메세지를 받게 된다.

특정 아이피 대역(4.4.4.*)을 차단하고 싶다면

deny from 4.4.4

혹은

deny from 4.4.4.0/24

국가별 차단

외부 그림 참조 차단

중복 검색을 막기 위한 Htaccess 설정..

구글 (Google) 등의 검색 엔진에서 같은 내용이 중복 검색이 된다면…

예를 들어 www.valsor.net/game openwiki.kr/game 등이 다 검색이 되어 등록이 된다면 내용 중복으로 구글등 검색 사이트에게서 불이익을 받게 된다.

아래와 같이 .Htaccess 파일에 설정을 추가하면 된다.

RewriteCond %{HTTP_HOST} !^openwiki.kr$ [NC]
RewriteRule ^(.*)$ http://openwiki.kr/$1 [L,R=301]

접속 주소가 openwiki.kr 아니라면 http://openwiki.kr/301 Redirect를 해주는 것임.

참고

누구나 수정하실 수 있습니다. 문법은 Formatting Syntax참조하세요.

역링크