chlonolog

web, digital gadgets, and more.

当サイトの.htaccessの設定

環境を一新したところで、現在のサイトの設定について。


.htaccessの設定内容

以前から設定していたのですが、今回ももろもろを圧縮して、できるかぎりの速度アップを狙っています。具体的にはCSS・JavaScript・フォントファイルをgzで圧縮した上でアップロードしてあります。

ErrorDocument 404 /404/

# 絶対に見せない
<Files ~ "^\.(htaccess|htpasswd*)$">
  Deny from all
</Files>

# 圧縮
RewriteCond %{HTTP:Accept-Encoding} gzip
RewriteCond %{REQUEST_FILENAME} !\.gz$
RewriteCond %{REQUEST_FILENAME}\.gz -s
RewriteCond %{REQUEST_FILENAME} \.js$ [OR]
RewriteCond %{REQUEST_FILENAME} \.css$
RewriteRule .+ %{REQUEST_URI}.gz

<FilesMatch "\.css\.gz$">
  ForceType text/css
  AddEncoding x-gzip .gz
</FilesMatch>
 
<FilesMatch "\.js\.gz$">
  ForceType application/x-javascript
  AddEncoding x-gzip .gz
</FilesMatch>

<FilesMatch "\.html\.gz$">
  ForceType   text/html
  AddEncoding x-gzip .gz
</FilesMatch>

# フォント周り
AddType application/x-font-ttf .ttf
AddType application/x-font-woff .woff
AddType application/x-font-woff2 .woff2
AddType application/x-font-opentype .otf
AddType application/vnd.ms-fontobject .eot
AddOutputFilterByType DEFLATE text/html text/plain text/xml text/css application/x-javascript application/javascript text/text application/x-font-ttf application/x-font-woff application/x-font-woff2 application/x-font-opentype application/vnd.ms-fontobject

# SVG
AddType image/svg+xml .svgz .svg
AddEncoding gzip .svgz

# キャッシュコントロール
<FilesMatch "\.(ico|jpe?g|png|gif|svg|swf|pdf|ttf|woff|woff2|otf|eot)$">
  # 有効期限:1年
  Header set Cache-Control "max-age=2592000, public"
</FilesMatch>
<Files ~ "^((bootstrap|jquery|lazysizes|lity).*(js|css))$">
  # 有効期限:1日
  Header set Cache-Control "max-age=86400, public"
</Files>
Header append Vary Accept-Encoding env=!dont-vary

無駄な処理が混じっていそうな気もしますが、Chromeのデベロッパーツールで確認したところいい感じに圧縮ファイルの方を取得しているようなので、まあいいかな。
特定JSファイルへのキャッシュ設定も、Chromeで見た限り「Status Code: 200 OK (from memory cache)」になっているので、ちゃんと動作しているはず……?


指定条件に一致したディレクトリのみBASIC認証

ついでに別サイトの方で使用している設定も。

ErrorDocument 401 /401/
ErrorDocument 404 /404/

Satisfy Any

# Bot対策
SetEnvIf User-Agent "Googlebot" ng_ua
SetEnvIf User-Agent "bingbot" ng_ua
Order Allow,Deny
Allow from all
Deny from env=ng_ua

# 特定のディレクトリ配下のみBASIC認証したい
AuthType Basic
AuthName "* Member Only *"
AuthUserFile /foo/bar/.htpasswd
AuthGroupFile /dev/null
require valid-user
SetEnvIf REQUEST_URI "memonly-*" auth_chk
Order Allow,Deny
Allow from all
Deny from env=auth_chk

.htaccessでは<Directory>が使えないので、SetEnvIfを使って条件に一致するディレクトリのみにBASIC認証をかけています。(上記設定の場合は/memonly-*に当てはまる名前のフォルダ)

動作確認しているときに知ったのですが、ChromeだとAuthNameに指定した値をダイアログに表示してくれないんですね。(Safariは表示してくれました)
ちょっとユーザに優しくないなーと思った次第です。

コメント

© 2018 chlono