.htaccess を利用すると、Webサーバの動作をディレクトリ単位で制御することができます。
たとえば、アクセス制限や他のページへのリダイレクトなどを設定することができます。
.htaccess の代表的な記述例をご紹介します。
ホームページを設置したアドレスにファイル名を指定せずにアクセスすると、そのディレクトリにある index.html などのインデックスファイルが表示されますが、index.html などのインデックスファイルを設置していない場合、そのディレクトリ内にあるファイルの一覧を表示してしまいます。
.htaccess を設置することで403エラーを返し、ファイル一覧の表示を拒否することで、セキュリティを高めることができます。
記述例
Options -Indexes
アドレスを公開していなくても、ブラウザのアドレス欄に特定のファイルのアドレスを直接入力すると、閲覧できてしまいます。そのファイルにパスワードや顧客データなどの重要なデータが記述されていたら情報が漏えいしてしまいます。
.htaccess を設置することでデータファイルへのブラウザからのアクセスを拒否することができます。
記述例
データファイルによくある'.dat''.log''.csv'といった拡張子のついたファイルへの
ブラウザからのアクセスを拒否する場合
<Files ~ "\.(dat|log|csv)$">deny from all</Files>
特定のドメインを他のドメイン下のディレクトリに設定する場合、特定のドメインのページを他のドメインのURLで表示できてしまいます。
例えば、home/アカウント名/public_html に独自ドメインのアドレス(http://www.example.com/)を設定しても、KAGOYA Internet Routing のセレクトドメインのアドレス(http://アカウント名.kir.jp/など)で表示することが可能です。
.htaccess を設置することで、他のドメインからのアクセスを拒否することができます。
記述例
http://www.example.com/ からのみアクセスを許可する場合
SetEnvIf Host "^www\.example\.com$" hos_ok
order deny,allow
deny from all
allow from env=hos_ok
特定のドメインを他のドメイン下のディレクトリに設定する場合、特定のドメインのページを他のドメインのURLで表示できてしまいます。
例えば、home/アカウント名/public_html に独自ドメインのアドレス(http://www.example.com/)を設定しても、KAGOYA Internet Routing のセレクトドメインのアドレス(http://アカウント名.kir.jp/など)で表示することが可能です。
.htaccess を設置することで、他のドメインのアドレスにリダイレクトすることができます。
記述例
http://abc.kir.jp/ へのアクセスを http://www.example.com/ にリダイレクトする場合
RewriteEngine on
RewriteCond %{HTTP_HOST} abc\.kir\.jp [NC]
RewriteRule .* http://www.example.com%{REQUEST_URI} [L,R=301]
SSLを設置しても、通常の http でのアクセスでは、SSLは有効になりません。https でアクセスする必要があります。
例えば、SSLを有効にしたいアドレス(https://www.example.com/)に対して、SSLが有効にならないアドレス(http://www.example.com/)でも表示できてしまいます。
常時SSLを有効にしたいドメインの割り当てディレクトリに .htaccess を設置することで、SSLが有効にならないアドレスでアクセスがあった場合に、SSLが有効なアドレスでのアクセスに切り替えることができます。
記述例
http://www.example.com/ へのアクセスを https://www.example.com/ にリダイレクトする場合
# レンタルサーバー(ライト,ベーシック,ハイエンド)、共用サーバー(S12,S22,S32)、マネージド専用サーバー 4シリーズ(044,044s,084s,124s,164s)をご利用中の場合
RewriteEngine on
RewriteCond %{HTTP:X-Forwarded-Proto} !https
RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]
# それ以外のプランをご利用中の場合
RewriteEngine on
RewriteCond %{HTTPS} off
RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
サービスプランを確認するには、当社コントロールパネルで、以下の画面を開きます。
コントロールパネル:◇コントロールパネル > (アカウント名) > 基本情報
IPAのTLS暗号設定ガイドラインでは、HTTP Strict Transport Security(HSTS)の設定有効化が推奨されています。http でのアクセスを https でのアクセスにリダイレクトするよう設定していても、最初に http でアクセスした時点で攻撃者がユーザーの Cookie を傍受し個人情情報を収集したり、フィッシングサイトへリダイレクトしたりする可能性があり、セキュリティ上の問題が残ります。こうした危険を減らすことができるのが HSTS です。
記述例
ブラウザ側に https でのアクセスを強制するヘッダ情報をキャッシュさせる期間を365日に設定する場合
Header add Strict-Transport-Security "max-age=31536000"
■参考URL TLS暗号設定ガイドライン(IPA発行)
https://www.ipa.go.jp/security/vuln/ssl_crypt_config.html
IPベースのバーチャルホスト設定をしているサーバーでは、SSLを設置していないホスト名に https でアクセスすると、SSLが設置されている異なるホスト名にアクセスされてしまいます。
例えば、SSLを設置していないホスト名(www.example.com)に https://www.example.com/ でアクセスしようとすると、SSLが設置されている異なるホスト名(www.first-ssl.com)のコンテンツが表示されてしまいます。
.htaccess をSSLが設置されているホスト名の割り当てディレクトリに設置することで、SSL証明書とは異なるホスト名に https でアクセスがあった場合に、http でのアクセスに切り替えることができます。
記述例
SSLが設置されている www.first-ssl.com とは異なるホスト名で https にアクセスがあったら http にリダイレクトさせる場合
RewriteEngine on
RewriteCond %{HTTP_HOST} !first-ssl\.com$ [NC]
RewriteRule ^(.*)$ http://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
特定のIPアドレスから過度なアクセスのため、お客様サーバーの転送量やアクセス数が浪費されてしまい、最悪の場合はお客様サーバーが帯域調整や同時接続数制限の対象となり、お客様サイトの表示が遅くなるなどの影響が生じます。
.htaccess を設置することで、特定のIPアドレスからのアクセスを拒否することができます。
記述例
123.456.789.123 からのアクセスを拒否する場合
order allow,deny
allow from all
deny from 123.456.789.123
Webサーバーでグループウェアなどを利用して情報共有をする場合、インターネットに接続できる環境であればどこからでもアクセスできてしまうため、情報漏えいのリスクが伴います。
.htaccess を設置することで、特定のIPアドレスからのアクセスのみ許可することができます。
記述例
123.456.789.123 からのアクセスを許可する場合
order deny,allow
deny from all
allow from 123.456.789.123
お客様サイトの画像が、直リンクなどで他人のサイトで引用されると、他人のサイトによってお客様サーバーの転送量やアクセス数が浪費されてしまい、最悪の場合はお客様サーバーが帯域調整や同時接続数制限の対象となり、お客様サイトの表示が遅くなるなどの影響が生じます。
.htaccess を画像ファイルのディレクトリに設置することで、お客様サイト以外からのリンクを拒否することができます。
記述例
お客様サイト http://www.example.com/ からのリンクのみ許可する場合
SetEnvIf Referer "^http://www\.example\.com" ref_ok
order deny,allow
deny from all
allow from env=ref_ok
お客様サイト内の特定のディレクトリを、特定のユーザーだけに公開したい場合には、.htaccess を設置することで、ユーザー名とパスワードによる Basic 認証をかけることができます。
Basic 認証には .htaccess ファイルの他に認証に使用するユーザー名とパスワードを設定する .htpasswd ファイルが必要です。以下の手順で .htpasswd ファイルを作成し、所定の場所にアップロードします。
認証に使用するユーザー名とパスワードを次のフォームに入力し「Basic 認証用パスワードを作成」をクリックします。
生成された文字列をコピーします。
テキストエディタを開き、生成された文字列を記述したテキストファイルを任意の名前で保存します。
記述例
.htpasswd ファイルを /home/(アカウント名)/.htpasswd に設置する場合
AuthType Basic
AuthName "secret area"
AuthUserFile /home/(アカウント名)/.htpasswd
Require valid-user
当社コントロールパネルのアクセス制限機能を利用するとより簡単に設定できます。
コントロールパネル:◇コントロールパネル > システム > Webサイト > アクセス制限
設定方法に関しては、「アクセス制限」をご確認ください。
WordPress や EC-CUBE の管理画面、グループウェアなどのログイン画面をインターネット上に公開している場合、インターネットに接続できる環境であればどこからでもアクセスできてしまうため、ブルートフォース攻撃などにより不正ログインされるリスクが伴います。
.htaccess を設置することで、ログイン画面にユーザー名とパスワードによる Basic 認証をかけることができます。
記述例
wp-login.php に Basic 認証を設定する場合
<Files wp-login.php>
AuthType Basic
AuthName "secret area"
AuthUserFile /home/(アカウント名)/.htpasswd
Require valid-user
</Files>
URL にファイル名までを含めずに、http://www.example.com/ のようにディレクトリへ直接アクセスしたときに表示するファイル名は、サーバー側であらかじめ設定されています。
.htaccess を設置することで、あらかじめ設定されたファイル名以外の名前のファイルを表示するように設定を変更することができます。
記述例
お客様サイト http://www.example.com/ にアクセスしたときに、http://www.example.com/top.html を表示させる場合
DirectoryIndex top.html
SSIをご利用いただく場合、そのHTML文書の拡張子は、.shtml とする必要があります。
.htaccess を設置することで、拡張子が .html でも SSI を使用することができます。
記述例
拡張子が .html でも SSI を使用する場合
# Apache1.3.x の場合
AddHandler server-parsed .html
# Apache2.x の場合
AddOutputFilter includes .html
Apache バージョンを確認するには、当社コントロールパネルで、以下の画面を開きます。
コントロールパネル:◇コントロールパネル > システム > Webサイト > サーバー情報
PHP のエラーログを出力するには、PHP の設定で log_errors を ON にする必要があります。
「PHP マニュアル > php.ini ディレクティブのリスト」を確認すると、このディレクティブは「PHP_INI_ALL」なので、.htaccess ファイルを設置することで設定を変更できます。
記述例
php_flag log_errors On
PHP のエラーは Apache のエラーログに出力されます。エラーログを確認するには、当社コントロールパネルで、以下の画面を開きます。