<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로 리디렉션합니다.