.htaccessによるアクセス制限

<<Linjuxシステム設定 トップページに戻る



  • Basic認証(パスワード認証)

     Basic認証とは、ホームページアクセス時に下記の画面が表示され、IDとパスワードを正しく入力しない限り、コンテンツにアクセスできないようにするものです。
    JAVAスクリプトなどによるパスワード制限は、パソコンのJAVAスクリプトが無効になっていたら動作しませんが、 .htaccessによるパスワード認証は無効にするすべが無いので、セキュリティー上も強固なものです。
    また、 .htaccessは携帯電話からのアクセスであっても、IDとパスワード要求をします。

    htaccess パスワード認証画面

    ・まず始めに .htaccessファイルをアクセス制限をしたいディレクトリに作成します。.(ドット)」がないと動作しないので注意してください。

     .htaccessなどの「.(ドット)」があるファイルは通常隠しファイルとして見えないので、FFFTPを使用の場合は「表示」→「.で始まるファイルを表示」にしてください。それ以外のソフトをお使いの方は、各ソフトのマニュアルなどを参照して調べてみてください。

    トップページからアクセス制限したい場合はindex.htmlがあるディレクトリに、トップページ以下に作成したい場合は、それ以下のディレクトリに作成します。

    ※ここでは、DocumentRoot(ルートディレクトリ)は /virtual/user/public_html/www.hostname.com/としてます。ご使用のサーバによって異なるので、わからないときはプロバイダーにお問い合わせしてみてください。

    例:トップページ以下の「test」というディレクトリ以下をアクセス制限する場合は下記に設置する。
      /virtual/user/public_html/www.hostname.com/test/.htaccess

      # cd /virtual/user/public_html/www.hostname.com/test

      # vi .htaccess

       AuthUserFile /virtual/user/htpass/.htpasswd
       AuthGroupFile /dev/null
       AuthName MembersOnly
       AuthType Basic
       <Limit GET POST>
       require valid-user
       </Limit>
      ←最後の行は必ず改行を入れる。

     1行目は任意のディレクトリで構いませんが、Webからアクセスできない場所に作成してください。DocumentRoot(ルートディレクトリ)(index.htmlが置いてあるディレクトリ)以下に作成しないようにしてください。なぜかというと、一般ユーザはファイルを閲覧する権限はありませんが、万が一閲覧されてしまうと、 .htpasswdに記載されているユーザIDが分かってしまうからです。パスワードは暗号化されていますが、ユーザIDは暗号化されていないので、ユーザIDがばれてしまいます。ユーザIDが分かっていれば、パスワード解析ソフトなどを使えば比較的簡単にパスワードが解析されてしまいますので注意してください! 逆に、ユーザIDが分からなければ、ハイエンドPCでパスワード解析ソフトを使っても解析するのに、おそらく何十年とかかると思うので、ほぼ不可能です。

  • 上記で作成した .htaccessの1行目で指定したディレクトリを作成する

      # mkdir /virtual/user/htpass

  • 「.htpasswd」ファイルを作成する

      # cd /virtual/user/htpass

      # htpasswd -c .htpasswd user

  • 「.htpasswd」にユーザアカウントを追加する

    ユーザアカウントを追加するときは「-c」オプションなしで実行する。(-cオプションは新規作成)
      # htpsswd .htpasswd user2

    上記コマンドを入力するとパスワードを聞かれるので、ご自分のパスワードを2回入力すると .htpasswdファイルがカレントディレクトリに生成されます。

     ※上記コマンドの「useruser2」はユーザアカウントの例えですので、ご自分のアカウントを入力してください。

  • サイトの転送(ページのジャンプ)

     ホームページを移転した時などによく使われる機能で、いままで使っていたホームページアドレスにアクセスがあった場合に、新しいホームページアドレスに自動で転送します。
    サイトの転送は、メタタグでもできますがメタタグの場合は全てのページに設定しなければなりませんが、 .htaccessによるサイトの転送は、 .htaccessを指定したディレクトリ以下の全てのページに適用されます。

    ・記述例:DocumentRoot(ルートディレクトリ)からの絶対パスで指定する。

    Redirect permanent /virtual/user/public_html/www.hostname.com/ http://linux.hayarimon.com/

    ※ご使用のブラウザによっては改行してあるように見えますが、改行はしません。
    上記の記述は、「http://linux.hayarimon.com/」に転送する設定で、通常はindex.htmlがあるディレクトリに設置します。

    ・ちなみに、メタタグでの設定は以下のようになっています。

    <META HTTP-EQUIV="refresh" content="5;URL=http://linux.hayarimon.com/">

     「content="5」は5秒後に転送するという事です。

  • ページが見つかりませんなどのエラーメッセージのカスタマイズ

    Basic認証失敗などのエラーメッセージを自分で作成して表示させることができます。
    まずは、エラーメッセージのHTMLを作成・設置して .htaccessに以下のように記述します。
    ・記述例

    ErrorDocument 401 /virtual/user/public_html/www.hostname.com/error/401.html
    ErrorDocument 403 /virtual/user/public_html/www.hostname.com/error/403.html
    ErrorDocument 404 /virtual/user/public_html/www.hostname.com/error/404.html
    ErrorDocument 500 /virtual/user/public_html/www.hostname.com/error/500.html


     .htaccessが置かれているディレクトリから見た相対パスを書くのではなく、お使いのサーバのDocumentRoot(ルートディレクトリ)からの絶対パスを記します。

    ・エラーメッセージのコードは以下のようになっています。

       ErrorDocument 401 − ユーザ認証失敗エラー
       ErrorDocument 403 − アクセス権限がない時のエラー
       ErrorDocument 404 − ファイルがない時のエラー
       ErrorDocument 500 − サーバーエラー(CGIやPHPの設定ミスなど)

  • ホームページアクセス時のデフォルトページを変更する

     通常はホームページにアクセスすると、そのディレクトリにある index.htmlが表示されます。DirectoryIndex を指定しておくと、このデフォルトのファイル(index.html)を違うファイルに変更することができます。

       DirectoryIndex site1.html site2.html index.html

     上記の記述だと、まず site1.html を呼び出そうとしますが、そのファイルが存在しなければ site2.html
    を表示し、それも存在しなければ index.html を表示します。