Press "Enter" to skip to content

[태그:] apache

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

    Ubuntu 20.04.3 LTS에서 Apache2 웹서버 설치

    쉘에서 다음 명령어를 순서대로 실행하세요.

    /var/www/html$ sudo apt update
    
    /var/www/html$ sudo apt install apache2
    
    방화벽 설정, 접속이 안될 경우 반드시 설정해야 함.
    /var/www/html$ sudo ufw allow 'Apache Full'
    Rule added
    Rule added (v6)
    
    /var/www/html$ sudo ufw status
    Status: active
    
    To                         Action      From
    --                         ------      ----
    1194/tcp                   ALLOW       Anywhere
    OpenSSH                    ALLOW       Anywhere
    Apache Full                ALLOW       Anywhere
    1194/tcp (v6)              ALLOW       Anywhere (v6)
    OpenSSH (v6)               ALLOW       Anywhere (v6)
    Apache Full (v6)           ALLOW       Anywhere (v6)
    • 환경설정 디렉토리 : /etc/apache2
    • 환경설정 예제파일 : /etc/apache2/apache2.conf입니다.
    • 포트 설정 : /etc/apache2/ports.conf
    • Apache Virtual Hosts 설정 : /etc/apache2/sites-available
      이 파일은 /etc/apache2/sites-enabled 디렉토리에 링크되어 있어야 함
    • 가상 호스트를 활성화 설정 : site-available
      site-enabled 디렉토리로 a2ensite 명령을 사용하여 symlink를 생성해야 함.
      비활성화하려면 a2dissite 명령 사용 함.
    • 도메인 이름이 mydomain.com인 경우 가상 호스트 구성 파일의 이름은 /etc/sshb2/vmx-available/mydomain.com.conf 으로 설정함.
    • Apache 모듈 로드 설정 : /etc/apache2/mods-available/
      mods-available 디렉토리의 구성은 a2enconf 명령을 사용하여 /etc/apache2/mods-enable/ 디렉토리에 대한 symlink를 생성해야 함.
      비활성화 하려면 a2disconf 명령 사용 함.
    • 글로벌 설정파일 : /etc/apache2/conf-available/ 디렉토리에 저장됨.
      conf-available 디렉토리의 파일은 a2enconf 명령을 사용하여 /etc/apache2/conf-enabled/에 대한 symlink를 생성해야 함.
      비활성화 하려면 a2disconf 명령 사용 함.
    • 로그 파일(ex:access.log 및 error.log) : /var/log/apache/ 디렉토리에 저장됨.