코드이그나이터(ci)

EP04. 코드이그나이터(.htaccess 이해 및 설정)

나는야리코더 2024. 8. 11. 15:08

url 주소 체계에서 index.php를 없애고 예쁘게 바꾸는 것을 오늘 해볼거다.

ex) 도메인/index.php  로 접속했던 페이지를 도메인만 입력해도 접속할 수 있도록

 

.htaccess파일을 수정하면 된다.

.htaccess파일은 아파치 부가 설정 파일이다.

서버에 있는 아파치 기본 설정파일을 모든 웹 프로젝트에 동일하게 적용할 수 없으니 .htaccess 파일에 설정을 하는 것

> index.php 파일이 있는 최상위 폴더에 생성한다.

 

> 생성후 아래 내용 복붙

> 모든 웹 프로젝트에 적용 가능


<IfModule mod_expires.c>
ExpiresActive on

# Add Proper MIME-Type for Favicon
AddType image/x-icon .ico "access plus 1 year"
 
# Compress compressible fonts
#AddOutputFilterByType DEFLATE font/ttf font/otf image/svg+xml
 
# Add a far future Expires header for fonts
ExpiresByType application/vnd.ms-fontobject "access plus 1 year"
ExpiresByType font/ttf "access plus 1 year"
ExpiresByType font/otf "access plus 1 year"
ExpiresByType font/x-woff "access plus 1 year"
ExpiresByType image/svg+xml "access plus 1 year"
ExpiresByType image/x-icon "access plus 1 year"

ExpiresByType image/jpg "access plus 1 year"
ExpiresByType image/jpeg "access plus 1 year"
ExpiresByType image/gif "access plus 1 year"
ExpiresByType image/png "access plus 1 year"
ExpiresByType text/css "acces plus 1 month"
ExpiresByType text/x-javascript "access plus 1 month"
ExpiresByType application/x-shockwave-flash "access plus 1 month"
ExpiresByType image/x-icon "access plus 1 year"
ExpiresDefault "access plus 3 days"

ExpiresByType application/pdf "access plus 0 seconds"


# Web fonts
    ExpiresByType application/font-woff                 "access plus 1 month"
    ExpiresByType application/vnd.ms-fontobject         "access plus 1 month"
    ExpiresByType application/x-font-ttf                "access plus 1 month"
    ExpiresByType font/opentype                         "access plus 1 month"
    ExpiresByType image/svg+xml                         "access plus 1 month"


# Data interchange
    ExpiresByType application/json                      "access plus 0 seconds"
    ExpiresByType application/xml                       "access plus 0 seconds"
    ExpiresByType text/xml                              "access plus 0 seconds"

  # HTML components (HTCs)
    ExpiresByType text/x-component                      "access plus 1 month"
  # HTML
    ExpiresByType text/html                             "access plus 0 seconds"
# JavaScript
    ExpiresByType application/javascript                "access plus 1 year"



# Manifest files
    ExpiresByType application/x-web-app-manifest+json   "access plus 0 seconds"
    ExpiresByType text/cache-manifest                   "access plus 0 seconds"
</IfModule>


# .htaccess file
<IfModule mod_rewrite.c>
    RewriteEngine on
    RewriteBase /   # 이부분은 코드이그나이터가 설치된 최상위 폴더를 가르켜야 한다. 그래서 나같은 경우는 /first/ 라고 적어줘야 한다.

    RewriteCond %{REQUEST_URI} ^system.*
    RewriteRule ^(.*)$ /index.php/$1 [L]
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteRule ^(.*)$ index.php/$1 [L]

    #### www 제거 #####
    RewriteCond %{HTTP_HOST} ^www\.(.+) [NC]
    RewriteRule ^(.*) http://%1/$1 [R=301,NE,L]

    #### www 자동 붙임 #####
    #RewriteCond %{HTTP_HOST} ^domain\.com [NC]
    #RewriteRule ^(.*)$ http://www.domain.com/$1 [L,R]
</IfModule>

 


 

> 우리가 웹사이트를 만들고 운영하게 된다면 트래픽을 최소화 해야한다.

그런데 우리가 웹사이트에 어떤 이미지나 폰트나 그런 것들을 우리 서버에 올려놓고

사용자가 접속을 할때마다 이 파일들을 계속 가져간다면 트래픽이 계속 늘어난다.

만약, 10메가짜리가 올라가 있는 웹페이지라고 했을 때 이 사용자가 10번 새로고침하면

트래픽이 이 사람 한 명 때문에 100메가가 소요하게 된다. 그런 것들을 방지하고자 그리고 이 사용자도 

접속할 때마다 10메가짜리를 계속 다운받기 때문에 페이지가 뜨는 데까지 속도가 느려서 굉장히

피로감을 얻게 된다. 그런 것들을 막기 위해 위와 같은 설정을 해준다.

 

> 같은 파일일 경우 1년 뒤(또는 1달뒤에) 새로 가져간다.

> 개발할 때는 강력새로고침을 통해 캐시를 사용하지 않고 서버 파일을 다운받아서 쓰도록 한다.

> 강력새로고침: ctrl+shift+R (window) / 커맨드+shift+R (mac)

 

> ifmodule mod_rewrite.c : 모드 리라이트라는 것은 아파치의 모듈

> 위 모듈이 설치되어져 있다면 <fmodule mod_rewrite.c >이 안의 설정들이 실행되는 것

> 기본적으로 아파치 최신 버전에는 모듈 리라이트가 포함되어져있다. 그래서 따로 설치할 필요는 없다.

> 자동으로 코드 실행될 것임.

 

>위의 설정을 했는데도 url에 index.php 를 뺐을 때 404에러가 뜨면

>.htaccess 파일을 사용할 디렉토리에 대해 AllowOverride 옵션을 설정해야한다.

> 터미널에서 아래와 같이 명령어를 실행한다.


> sudo nano /etc/httpd/conf/httpd.conf

<Directory /var/www/html/first>
    AllowOverride All
    Options Indexes FollowSymLinks
    Require all granted
</Directory>

>위의 설정을 추가한 후 서버 재시작(> sudo systemctl restart httpd)하니 잘 작동됨.