どんな場面でhtaccessを使うのか?

apcheのhttpd.confで、出来る物に関してはそちらで対応した方が良い。
運用上のリダイレクトや共用サーバーでconfファイルがいじれない場合などに利用する。

  • リダイレクト処理
  • アクセス制限
  • URLの統一

などに使用する


前提条件

httpd.confファイルにて,AllowOverrideが有効になっている必要がある

<Directory />
~中略~
AllowOverride None
~中略~
</Directory>

<Directory "対象となるディレクトリ 例) /var/home/www">
~中略~
AllowOverride All
~中略~
</Directory>


リダイレクト処理について

シンボリックリンクを許可し、RewriteEngineをOnにする

.htaccessのでRewriteEngineをOnにするにはOptions FollowSymLinksを設定しなければならないとApacheの公式サイトにあります。

Options +SymLinksIfOwnerMatch

リダイレクト処理について


アクセスの制限と許可

htaccessへの直接のアクセスを制限

直接ブラウザなどから.htaccessにアクセスできないように制限する。

<Files ~ "^\.ht">
deny from all
</Files>

BASIC認証

別途 .htpasswdファイルが必要

ベーシック認証の暗号化形式にも注意
Password Formats

AuthTYpe Basic
AuthName "Input your ID and Password"
AuthUserFile /home/current/.htpasswd
AuthGroupFile /dev/null
Require valid-user

  • AuthTYpe Basic

現行ダイジェスト認証に対応しているブラウザも多いため、そちらを利用するのも良い

AuthTYpe Digest
※ Digest認証だと、ユーザーIDとパスワードがハッシュ関数を用いて暗号化され解析されにくくなります。
  • AuthGroupFile /dev/null
    グループ指定が無いという意味、グループを使用する場合は
    .htgroupファイルが必要

    ※グループやRequire の記述で.htpasswdファイルは一つで
    各ディレクトリ毎に.htaccessを用意して権限を分けやすくするというメリットはある。

参照

IP制限

BASIC認証、もしくはIP制限

Satisfy Anyがポイント

Basic認証の記述 + Satisfy Any + IP制限、許可 の順番で記述する。

AuthType Basic
AuthName "Input your ID and Password"
AuthUserFile /home/current/.htpasswd
AuthGroupFile /dev/null
Require valid-user

Satisfy Any

order allow,deny
allow from 100.100.100.100

細かくはこちらを参照

その他、細かなファイルや拡張子単位での制限


URLの統一

httpsに統一する

RewriteEngine On
RewriteCond %{HTTPS} off
RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [R,L]

wwwありなしの統一

※ 前提条件として www.はサブドメイン


番外 FTPのIPアクセス制限(.ftpaccess)

  • [FTP接続制御!IPアドレスによるアクセス制限設定をする方法](https://www.nkshopping.biz/index.php?
    FTP%E6%8E%A5%E7%B6%9A%E5%88%B6%E5%BE%A1%EF%BC%81IP%E3%82%A2%E3%83%89%E3%83%AC%E3%82%B9%E3%81%AB%E3%82%88%E3%82%8B%E3%82%A2%E3%82%AF%E3%82%BB%E3%82%B9%E5%88%B6%E9%99%90%E8%A8%AD%E5%AE%9A%E3%82%92%E3%81%99%E3%82%8B%E6%96%B9%E6%B3%95)
TOP フルスタックエンジニアを目指すに方々へ 2018年3月19日 各種サーバについて、Webサーバ、DBサーバ、PUSHサーバなどなど