ノウハウ

.htaccessの書き方。リダイレクト・アクセス制御・チューニング・カスタムページ設定を紹介。

こんにちは!土門大貴(daikidomon)です。

.htaccessといえばホスティングサービスを利用する上で必須の設定ファイルになります。

.htaccessとは?

「.htaccess」とは、最も多く使用されているオープンソースのWEBサーバー「Apache」を制御する設定ファイルの1つです。

Apacheの制御は設定ファイル「httpd.conf」に記載されていますが、これをWEBサーバー全体の制御を行っているため、サーバー管理者しか変更することができません。

Xserverなどの共有サーバ構成のホスティングサービスでWEBサーバーの設定を変えたい場合は、「.htaccess」でWEBサーバの挙動を制御することができます。

.htaccessで出来ることとは?

「.htaccess」で出来ることは以下になります。

  • リダイレクト設定(違うページに移動させる、URL変換を行う)
  • アクセス制御(アクセス出来るファイル・ディレクトリを制限する)
  • チューニング(ファイル転送容量を減らす)
  • その他設定変更

.htaccessの作成方法

「.htaccess」の作成方法はとても簡単で、テキストファイルで「.htaccess」ファイルを作成すればOKです。

ファイル名の前にドットがついており、隠しファイルにすることを忘れずに行ってください。

作成したファイルを制御を掛けたいディレクトリに配置させます。

一般的にはindex.htmlやindex.phpファイルと同一ディレクトリに配置します。

リダイレクト設定

リダイレクト設定は「.htaccess」で最も頻繁に利用します。

ドメイン名をwww”あり”に統一

Yahoo!JapanやYoutubeなどのようにwww付きのドメインにする場合には↓の記載します。
<IfModule mod_rewrite.c>
RewriteEngine on
RewriteCond %{HTTP_HOST} !^www\. [NC]
RewriteRule ^(.*)$ http://www.%{HTTP_HOST}/$1 [R=301,L]
</IfModule>

ドメイン名をwww”なし”に統一

個人のブログや中小企業などに多い、www無しのドメインにする場合には↓の記載します。
<IfModule mod_rewrite.c>
RewriteEngine on
RewriteCond %{HTTP_HOST} ^www\. [NC]
RewriteRule ^(.*)$ http://%{HTTP_HOST}/$1 [R=301,L]
</IfModule>

HTTPS(SSL)アクセスに変更

HTTPS(SSL)アクセスに変更する場合は、↓のように記載します。

HTTPSアクセス化はSEO観点で必須なので必ず設定しておきましょう。
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteCond %{HTTPS} off
RewriteRule ^(.*)$ https://%{HTTP_HOST}/$1 [R=301,L]
</IfModule>

301(恒久的)リダイレクト

サイトの引っ越しなどで使用する301(恒久的)リダイレクト設定は↓になります。
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteRule ^(.*)$ index.html [R=301]
RewriteRule ^(.*)$ https://%{HTTP_HOST}/index.html
</IfModule>

302(暫定的)リダイレクト

サイトのメンテナンス時などで使用する302(暫定的)リダイレクト設定は↓になります。
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteRule ^(.*)$ index.html [R=302]
RewriteRule ^(.*)$ https://%{HTTP_HOST}/index.html
</IfModule>

アクセス制御

アクセスさせたくないファイルやディレクトリがある場合には、アクセス制御を行います。

ベーシック認証

最も安価にアクセス制御を行う方法として「ベーシック認証」を利用できます。
AuthUserFile /var/www/.htpasswd
AuthGroupFile /dev/null
AuthName "Please input UserID and Password."
AuthType Basic
require valid-user

許可リスト(ホワイトリスト)での制御

アクセス許可していないが、○○だけは許可する」という場合には↓のように設定します。

Allow(許可)」に対象のIPアドレスやホスト名を記載します。
Order Allow,Deny
Allow from XXX.XXX.XXX.XXX
Allow from ホスト名
Order」や「Allow」は後方に記載されたもの優先的に使用されます。↑の例では「Deny(拒否)」が優先的に使用されます。

「.htaccess」は後方に記載されたものが優先と覚えておきましょう。

拒否リスト(ブラックリスト)での制御

アクセスを許可しているが、○○だけは拒否する」という場合には↓のように設定します。

Deny(拒否)」に対象のIPアドレスやホスト名を記載します。
Order Deny,Allow
Deny from XXX.XXX.XXX.XXX
Deny from ホスト名
Order」や「Deny(拒否)」は後方に記載されたもの優先的に使用されます。↑の例では「Aloow(許可)」が優先的に使用されます。

「.htaccess」は後方に記載されたものが優先と覚えておきましょう。

チューニング

「.htaccess」でのチューニングは、「ブラウザ側でのキャッシュ」と「データの圧縮転送」の2つになります。

ブラウザ側でのキャッシュ

ブラウザ側にファイルをキャッシュさせるには「mod_expires.c」を使用します。
<IfModule mod_expires.c>

ExpiresActive on
ExpiresDefault "access plus 1 days"

# HTML
ExpiresByType text/html "access plus 1 hours"

# CSS
ExpiresByType text/css "access plus 1 days"

# JavaScript
ExpiresByType application/javascript "access plus 1 days"
ExpiresByType application/x-javascript "access plus 1 days"
ExpiresByType text/javascript "access plus 1 days"

# Image & Movie
ExpiresByType audio/ogg "access plus 1 days"
ExpiresByType image/bmp "access plus 1 days"
ExpiresByType image/gif "access plus 1 days"
ExpiresByType image/jpeg "access plus 1 days"
ExpiresByType image/png "access plus 1 days"
ExpiresByType image/svg+xml "access plus 1 days"
ExpiresByType image/webp "access plus 1 days"
ExpiresByType video/mp4 "access plus 1 days"
ExpiresByType video/ogg "access plus 1 days"
ExpiresByType video/webm "access plus 1 days"

# Favicon
ExpiresByType image/vnd.microsoft.icon "access plus 1 days"
ExpiresByType image/x-icon "access plus 1 days"

# Fonts

# Embedded OpenType (EOT)
ExpiresByType application/vnd.ms-fontobject "access plus 1 month"
ExpiresByType font/eot "access plus 1 month"

# OpenType
ExpiresByType font/opentype "access plus 1 month"

# TrueType
ExpiresByType application/x-font-ttf "access plus 1 month"

# Web Open Font Format (WOFF) 1.0
ExpiresByType application/font-woff "access plus 1 month"
ExpiresByType application/x-font-woff "access plus 1 month"
ExpiresByType font/woff "access plus 1 month"

# Web Open Font Format (WOFF) 2.0
ExpiresByType application/font-woff2 "access plus 1 month"

# Other
ExpiresByType text/x-cross-domain-policy "access plus 1 days"

</IfModule>
キャッシュさせる期間は↓を参考にしてみてください。

参考Apache モジュール mod_expires

データの圧縮転送

データを圧縮してから転送することでクライアント側に送信するデータ量を抑えることが出来ます。

ネットワークがボトルネックに場合に利用することをオススメします。

データ圧縮には「mod_deflate.c」を使用します。
<ifModule mod_deflate.c>
<IfModule mod_filter.c>
AddOutputFilterByType DEFLATE text/html text/xml text/css text/plain
AddOutputFilterByType DEFLATE image/svg+xml application/xhtml+xml application/xml
AddOutputFilterByType DEFLATE application/rdf+xml application/rss+xml application/atom+xml
AddOutputFilterByType DEFLATE text/javascript application/javascript application/x-javascript application/json
AddOutputFilterByType DEFLATE application/x-httpd-php application/x-httpd-fastphp
AddOutputFilterByType DEFLATE application/x-font-ttf application/x-font-otf
AddOutputFilterByType DEFLATE font/truetype font/opentype
</IfModule>
</ifModule>
また別の方法として「mod_pagespeed」を使用する方法があります。

ただしXserverなどの一部の共有サーバでしか使用できません。
<IfModule pagespeed_module>
ModPagespeed on
</IfModule>

その他の設定

その他のよく使う設定です。「httpd.conf」で

400系エラーページの指定

400系エラーページを「ErrorDocument 」を使用して個別に指定することが出来ます。
# 400 Bad Request
ErrorDocument 400 /400error.html
# 401 Unauthorixed
ErrorDocument 401 /401error.html
# 403 Forbidden
ErrorDocument 403 /403error.html
# 404 Not Found
ErrorDocument 404 /404error.html

500系エラーページの指定

サーバサイドのエラーである500系も400系と同様に「ErrorDocument 」を使用して個別に指定することができます。
# 500 Internal Server Error
ErrorDocument 500 /500error.html
# 502 Bad Gateway
ErrorDocument 502 /502error.html
# 503 Service Unavailable
ErrorDocument 503 /503error.html

ファイル・ディレクトリ一覧を非表示にする

ファイル・ディレクトリ一覧上方を非表示させます。セキュリティ観点で非表示させることが一般的です。
# Disable index map
Options -Indexes

CGIの実行を有効化する

CGIの有効化も「.htaccess」で制御することができます。

実行可能にするCGIの拡張子は「AddType」で設定します。
# Enable Excute CGI
Options +ExecCGI
AddHandler cgi-script cgi
AddType application/x-httpd-cgi .cgi .pl .py .rb
 

その他必要な記述を更新してきます!

関連記事

-ノウハウ

Copyright© スタートアップIT企業社長のブログ , 2020 All Rights Reserved.