워드프레스 .htaccess 최적화

시놀로지 나스에서 워드프레스를 구동하면서 최적화에 대한 검색은 102번 정도 한 것 같습니다. 워드프레스를 최적화하는 방법에는 여러 가지가 있겠지만, 아주 중요한 파일인 .htaccess 에 몇 가지 코드를 추가하여 최적화 해보겠습니다.

이유는 잘 모르겠지만 나스에서 패키지로 설치한 워드프레스는 주기적으로 .htaccess 파일이 변조되면서 500 에러를 토해내는 현상을 볼 수 있었는데요. 아직 이유는 찾지 못하고 있습니다. 가끔 500 에러 뜨면 반사적으로 DSM에 접속해서 .htaccess 파일을 원래대로 돌려놓습니다. 그때 기본적으로 설정되어 있던 .htaccess 내용으로 치환하기 때문에 오늘 정리 내용은 제가 꾸준히 보려고 작성하는 것입니다. 참고만 하세요.

 


텍스트, HTML, 자바스크립트, CSS, XML 등을 압축

# compress text, html, javascript, css, xml:
AddOutputFilterByType DEFLATE text/plain
AddOutputFilterByType DEFLATE text/html
AddOutputFilterByType DEFLATE text/xml
AddOutputFilterByType DEFLATE text/css
AddOutputFilterByType DEFLATE application/xml
AddOutputFilterByType DEFLATE application/xhtml+xml
AddOutputFilterByType DEFLATE application/rss+xml
AddOutputFilterByType DEFLATE application/javascript
AddOutputFilterByType DEFLATE application/x-javascript
AddType x-font/otf .otf AddType x-font/ttf .ttf
AddType x-font/eot .eot AddType x-font/woff .woff
AddType image/x-icon .ico

 


이미지, 자바스크립트, CSS 등에 브라우저 캐시 적용

<ifModule mod_expires.c>
ExpiresActive On
ExpiresDefault "access 1 month"
ExpiresByType image/x-icon "access 1 year"
ExpiresByType image/svg "access 1 year"
ExpiresByType image/jpeg "access 1 year"
ExpiresByType image/png "access 1 year"
ExpiresByType image/gif "access 1 year"
ExpiresByType application/x-shockwave-flash "access 1 year"
ExpiresByType text/css "access 1 month"
ExpiresByType text/javascript "access 1 month"
ExpiresByType application/javascript "access 1 month"
ExpiresByType application/x-javascript "access 1 month"
ExpiresByType text/html "access 1 month"
ExpiresByType application/xhtml+xml "access 1 year"
</ifModule>
 
# 1 Month for most static assets
<filesMatch ".(css|jpg|jpeg|png|gif|js|ico)$">
Header set Cache-Control "max-age=2592000, public"
</filesMatch>

 


HTML, 자바스크립트 등을 GZIP으로 압축

# BEGIN GZIP
<ifmodule mod_deflate.c>
AddOutputFilterByType DEFLATE text/text text/html text/plain text/xml text/css application/x-javascript application/javascript
BrowserMatch ^Mozilla/4 gzip-only-text/html
BrowserMatch ^Mozilla/4.0[678] no-gzip
BrowserMatch bMSIE !no-gzip !gzip-only-text/html
</ifmodule>
# END GZIP

 


특정 폴더에 index.php가 없는 경우 전체 디렉토리 목록화 방지

# directory browsing
Options All -Indexes

 


워드프레스 주요 파일 수정 금지

※ 참고로 이 설정은 나스에서 패키지로 설치한 워프의 경우 500 에러가 출몰하여 설정하지 않았습니다.

# WPhtC: Protect WP-config.php
<files wp-config.php>
order allow,deny
deny from all
</files>
 
# WPhtC: Protect .htaccess file
<files ~ "^.*\.([Hh][Tt][Aa])">
order allow,deny
deny from all
</files>