アクセス制御したい(.htaccess

 1# 特定のIPからのアクセスを拒否
 2Order Allow,Deny
 3Deny from 192.168.1.1
 4Allow from all
 5
 6# WordPress管理画面へのアクセスを限定
 7<Files wp-login.php>
 8  Order Deny,Allow
 9  Deny from all
10  Allow from 許可IPアドレス
11</Files>
12
13# .htaccessファイルへのアクセス禁止
14# 外部(=ブラウザ経由)のアクセスを禁止
15# 内部(=ssh経由)のアクセスは可能
16<Files .htaccess>
17  Order Allow,Deny
18  Deny from all
19</Files>
20
21# Basic認証
22AuthType Basic
23AuthName "Restricted Area"
24AuthUserFile /path/to/.htpasswd   # .htpasswdのパス
25Require valid-user
26
27# リダイレクトの設定
28Redirect 301 古いURL 新しいURL

.htaccessを使って、ウェブサイトに対するアクセスやレスポンスを制御できます。 ファイル/ディレクトリに対するアクセス制限やリダイレクト、パスワード認証などを設定できます。

ディレクトリごとに設置できるため、研究室サーバーの個人スペースなどでにも設置できます。 httpd.confなどのサーバー設定ファイルの編集権限がないケースで活躍します。

アクセス制御を有効にしたい(AllowOverride

// httpd.confのパスを確認
$ find . -name httpd.conf
1<Directory "該当のパス">
2  AllowOverride All
3  Require all granted
4</Directory>

.htaccessを使ってアクセス制御したい場合、 該当ディレクトリに対してAllowOverrideディレクティブが有効になっている必要があります。

アクセス制御したい(Required

 1# 一括許可/一括拒否
 2Require all granted    # Allow from all に相当
 3Require all denied     # Deny from all に相当
 4
 5# IPアドレス/ドメインを指定して許可
 6Require ip 許可IPアドレス    # Allow from 許可IPアドレスに相当
 7Require host 許可ドメイン名  # Allow from 許可IPドメイン名に相当
 8
 9# IPアドレス/ドメインを指定して拒否
10Require not ip 拒否IPアドレス    # Deny from 拒否IPアドレスに相当
11Require not host 拒否ドメイン名  # Deny from 拒否IPアドレスに相当

Requireディレクティブを使って、アクセス制限を設定しています。

注釈

RequireディレクティブはApache2.4で追加(改善?)されたディレクティブです。 Apache 2.4からはRequireディレクティブを使うことが推奨されています。 Apache 2.2まではOrderAllowDenyディレクティブが使われていましたが、 将来的に廃止される予定だそうです。

1Require ip 許可IPアドレス/サブネットマスク
2Require ip 192.168.1.1/8    # => 192.  0.0.0 - 192.255.255.255
3Require ip 192.168.1.1/16   # => 192.168.0.0 - 192.168.255.255
4Require ip 192.168.1.1/24   # => 192.168.1.0 - 192.168.  1.255

IPアドレスはサブネットマスクを使って範囲指定できます。

注釈

サブネットマスクは、 IPアドレス(IPv4)をネットワーク部ホスト部に分けることで、 巨大なIPアドレス空間を分割・管理するための仕組みです。

サブネットマスクが 255.255.0.0/16)の場合は、65534個のホスト、 255.255.255.0/24)の場合は、254個のホスト、 がそのネットワーク内で利用できることを表しています。

複数条件したい(RequireAny

1<Files "wp-login.php">
2  <RequireAny>
3    Require all denied
4    Require ip 許可IPアドレス1/サブネットマスク
5    Require ip 許可IPアドレス2/サブネットマスク
6  </RequireAny>
7</Files>

RequiredAnyディレクティブで、複数の条件を設定できます。 上記のサンプルは、WordPressの管理画面へのアクセスを制御しています。 Filesディレクティブを使ってwp-login.phpを指定し、 指定したIPアドレスからのアクセスを許可しています。

パスワード保護したい(Basic認証)

1AuthType Basic
2AuthName "Restricted Area"
3AuthUserFile /path/to/htpasswd
4Require valid-user

特定のディレクトリに設置して、パスワード保護できます。 HTTPSが有効なウェブサイトであれば、Basic認証でよいそうです。

// .htpasswdが存在しない場合
$ htpasswd -c /var/www/etc/.htpasswd ユーザー名
// パスワードを入力
// パスワードを入力(確認)

// .htpasswdに追記する場合
$ htpasswd /var/www/etc/.htpasswd ユーザー名

サーバー内でhtpasswdコマンドを使って.htpasswdファイルを作成します。 パスワードファイルは、ウェブで公開されるディレクトリの外に作成し、 AuthUserFileで指定したパスに配置します。 パスワードはハッシュ化されて、このファイルに保存されます。

注釈

パスワード保護の手法としてBasic認証Digest認証という方式があります。 HTTPSが有効なサイトでは、通信が暗号化されているのでBasic認証でOKです。

リダイレクトしたい(Redirect

1# 301: 恒久的リダイレクト
2Redirect 301 古いURL 新しいURL
3
4# 302: 一時的リダイレクト
5Redirect 302 古いURL 新しいURL

Redirectディレクティブを使ってURLのリダイレクトを設定できます。

HTTPSリダイレクトしたい(RewriteRule

1<IfModule mod_rewrite.c>
2RewriteEngine On
3RewriteCond %{HTTPS} off
4RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
5</IfModule>

RewriteRuleディレクティブを使って、HTTPSリダイレクトを設定できます。 RewriteEngineRewriteCondディレクティブを合わせて使います。 また、リダイレクトにはmod_rewriteモジュールが有効になっている必要があります。

リファレンス