Press "Enter" to skip to content

.htaccess 예제 및 설명

<IfModule mod_rewrite.c>
 RewriteEngine On
 RewriteCond $1 !^(index\.php)
 RewriteCond %[REQUEST_FILENAME] !-f
 RewriteCond %[REQUEST_FILENAME] !-d
 RewriteRule ^(.*)$ index.php?param=$1 [L]
</IfModule>

.htaccess파일은 아파치 웹 서버에서 URL 재작성(rewriting)을 위해 사용됩니다.

위 내용은 사용자가 웹사이트의 특정 URL에 접근할 때, 해당 요청을 index.php 파일로 리디렉션하고, 추가로 파라미터를 변수를 전달하는 것입니다.

각각의 라인을 하나씩 뜯어보도록 합시다.

<IfModule mod_rewrite.c>

아파치의 mod_rewrite 모듈이 활성화되어 있을 때만 이 규칙을 적용하겠다는 뜻입니다. 

mod_rewrite 모듈은 URL을 재작성하는 데 사용됩니다.

RewriteEngine On
URL 재작성 기능을 활성화합니다. 

이 라인이 있어야만 아래의 RewriteRule과 RewriteCond가 적용됩니다.

RewriteCond $1 !^(index\.php)
조건을 정합니다.

요청된 URL이 index.php가 아닌 경우에만 아래의 규칙이 적용되도록 합니다. 

여기서 $1은 RewriteRule에서 첫 번째 그룹을 의미합니다.
!는 “부정(NOT)”을 의미하며, ^는 문자열의 시작을 의미하고, \.는 마침표(.)를 의미합니다. 

따라서 이 조건은 index.php로 시작하지 않는 요청을 의미합니다.

RewriteCond %{REQUEST_FILENAME} !-f

이 조건은 요청된 파일이 실제 서버에 존재하지 않는 경우에만 규칙을 적용하도록 합니다. 

-f는 실제 파일 여부를 확인하는 플래그입니다.

RewriteCond %{REQUEST_FILENAME} !-d
이 조건은 요청된 경로가 실제 디렉토리가 아닌 경우에만 규칙을 적용하도록 합니다. 

-d는 디렉토리 여부를 확인하는 플래그입니다.

RewriteRule ^(.*)$ index.php?param=$1 [L]
이 라인은 실제 재작성 규칙을 정의합니다.

  • ^(.*)$는 URL의 전체 경로를 저장합니다.
  • .*는 모든 문자열을 의미하며, 이는 그룹 $1에 저장됩니다.
  • index.php?param=$1는 저장된 URL 경로를 index.php의 param 파라미터로 전달합니다.
  • [L]은 이 규칙이 마지막이라는 것을 의미합니다. 이 규칙이 적용되면 추가적인 규칙은 처리되지 않습니다.

종합

이 .htaccess 파일은 다음과 같이 작동합니다:

요청된 URL이 index.php로 시작하지 않으면,

요청된 URL이 실제 파일이나 디렉토리가 아니라면,

그 요청을 index.php 파일로 리디렉션하고, 원래의 URL 경로를 param이라는 파라미터로 전달합니다.

예를 들어, 사용자가 test.com/data에 접근하면, 이 파일은 내부적으로 test.com/index.php?param=data로 리디렉션합니다.

    Be First to Comment

    답글 남기기

    이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다