さくらのレンタルサーバーで PHP を .html 等の拡張子で実行させる方法

2009年9月20日 16:07 さくらのレンタルサーバーで PHP を .html 等の拡張子で実行させる方法

先日.htaccess で .html 等の拡張子で PHP を実行させる方法という記事を書きましたが、さくらのレンタルサーバーでは、PHP が CGI として動いているため、上記記事の設定では、.html 等の拡張子で PHP を実行することができません。

なので、今回はさくらのレンタルサーバーに絞った、設定方法の解説です。

php-cgi をドキュメントルートにコピーする

SSH でサーバーにログインし、php-cgi というバイナリファイルを、自分のドキュメントルートにコピーします。

cp /usr/local/php/default/bin/php-cgi ~/www/php.cgi

コピーする際に、ファイル名を php.cgi のように拡張子を .cgi にしておくのがポイント。

ついでに、コピーした php.cgi のパーミッションも変えておきましょう。

chmod 0705 php.cgi

.htaccess の編集

さて、続いて .htaccess を編集します。

以下の二行を追加。

Action myphp-script	/php.cgi
AddHandler myphp-script	.php .html

これで .html でも PHP が動くようになります。

ただし、この方法だと、PHP の CGI版バイナリファイルを直接ドキュメントルートに持ってきて、それを実行するようになってますので、レンタルサーバー側の PHP がバージョンアップされても、コピーした PHP は古いままです。
なので、バージョンアップ情報等は自分でチェックして、そのたびにコピーし直す必要があるでしょう。

あるいは、コピーせずにシンボリックリンクを作ってもいけるのかな?
これは試していないので、ちょっと不明です。

関連するブログ記事
カテゴリー
.htaccess | PHP | レンタルサーバー
タグ
.htaccess | CGI | PHP | UNIX | さくらのレンタルサーバー | コマンドライン | シェル | 拡張子

コメント(20)

 

.htaccess で .html 等の拡張子で PHP を実行させる方法

.htaccess を使用して、ディレクトリ単位で PHP を「.php」以外の拡張子で動作させるための設定方法です。

基本的には、.htaccess に、以下を記述するだけで OK です。

AddType	application/x-httpd-php .html

.html じゃなくて、例えば .htm を PHP として動かしたければ、

AddType	application/x-httpd-php .htm

とすれば OK。

ただし、上記の例で言うところの .html や .htm という拡張子に、既に何らかの設定がなされている場合、PHP が正常に動かない場合があります。
その場合は、 AddType を設定する行の前に、

RemoveHandler	.html

という行を追加して、設定をクリアしておくと良いかもしれません。

まとめると、.html という拡張子で PHP を動かしたいときは、

RemoveHandler	.html
AddType	application/x-httpd-php .html

という二行を .htaccess に書いておく。ということになりますね。

関連するブログ記事
カテゴリー
.htaccess | PHP
タグ
.htaccess | AddType | PHP | RemoveHandler

コメント(24)

 

.htaccess で CGI スクリプトを実行できるように設定する方法

.htaccess を使用して、ディレクトリ単位で CGI の実行を許可する方法の解説です。

CGI スクリプトを実行可能にする

ディレクトリに対して、CGI スクリプトの実行を可能にするためには、.htaccess に以下のように記述します。

Options +ExecCGI

「ExecCGI」(CGI の実行)というオプションを追加(「+」)してる、というようなニュアンスですね。

逆に、

Options -ExecCGI

と書けば、CGI スクリプトの実行ができなくなります。

拡張子「.cgi」を CGI スクリプトであると認識させる

以下のように .htaccess に記述することで、Webサーバーに、拡張子「.cgi」がCGI スクリプトである、と認識させることができます。

AddType application/x-httpd-cgi .cgi

上記以外にも例えば、「.pl」の拡張子のファイルを CGI スクリプトと認識させたければ、

AddType application/x-httpd-cgi .pl

と書けば良いですし、PHP を CGI スクリプトとして実行する場合は、

AddType application/x-httpd-cgi .php

と書けば良いでしょう。

関連するブログ記事
カテゴリー
.htaccess | perl/CGI
タグ
.htaccess | AddType | CGI | Content-type | Options | perl | PHP

コメント(12)

 

SEO対策として使われる、perl の CGI や PHP に GET で渡す値を「/」(スラッシュ)で区切る方法

よく「CGI や PHP は SEO に不利だ!」なんてことが言われますが、これは技術的なことをよく理解していない人に向けて、難しいことを極端に省略した説明なので、大きな誤解を孕んでいます。

正確には、

http://www.abe-tatsuya.com/aaa.cgi?v1=bbb&v2=ccc

のようなURIの、CGI や PHP に値を GET メソッドで渡す「?v1=bbb&v2=ccc」といった部分が問題なわけです。
こういった値を渡さない、シンプルな URI であれば、拡張子が何であろうが関係はないはずです。

なので、逆に CGI や PHP でなく、拡張子が .html であっても、

http://www.abe-tatsuya.com/aaa.html?v1=bbb&v2=ccc

のような URI なら、同様に検索エンジン側から「これは動的なURIだ」と判断されて、低く評価されるはずです。
(アクセス解析目的とか、ページ側で JavaScript 等で何かの処理をする際に、こういう手法を取ることはあり得ますよね)

で、そういった CGI や PHP 等に、GET メソッドで値を渡した結果によって表示する内容を変えるようなコンテンツの場合、検索エンジンから低く評価されることを避けるために、下記のような URI で処理することが多いです。

http://www.abe-tatsuya.com/aaa/bbb/ccc

最初の例との違いは、以下の通りです。

  1. 「aaa.cgi」の拡張子「.cgi」がない
  2. 「ここからが GET メソッドで渡す値ですよ」という意味の記号「?」がなく、代わりに「/」で区切っている
  3. GET メソッドで渡す値の名前(「v1=」「v2=」)がない
  4. GET メソッドで渡す値の区切りの記号「&」がなく、代わりに「/」で区切っている

これで、一見して動的な URI ではなく、単なるディレクトリ内にあるファイルの URI のように見せることができるわけです。

これを実現するためにやらないといけないことは、

  1. 「aaa」という拡張子のないファイルが、CGI または PHP のスクリプトであることをサーバーに教えてあげる
  2. 「aaa」のスクリプト内で、「/」区切りで渡される値を受け付ける処理を書く

大きく分けて、この二点です。

拡張子のないファイルを CGI や PHP として動作させる方法

「aaa」のような拡張子のないファイルを、CGI または PHP として動作させるには、.htaccess を使います。

特定のファイルに対するアクセス制限や、.htaccess で特定のファイルのみにBasic認証を設定する方法の応用で、

<Files aaa>
ForceType cgi-script
</Files>

と書けば、「aaa」というファイルが CGI として実行されます。

PHP として実行したい場合は、

<Files aaa>
ForceType application/x-httpd-php
</Files>

と書けば、「aaa」というファイルが PHP として実行されます。

perl の CGI や PHP で、「/」(スラッシュ)で区切られた値を受け取る方法

とりあえず「aaa」のようなファイル名のスクリプトが動くようになりました。
次は「/bbb/ccc」のような、一見ただのディレクトリへのリクエストのように見える URI を、スクリプトに渡される値として処理するための方法です。

これには、環境変数 PATH_INFO を参照します。

例えば、perl の CGI である「http://www.abe-tatsuya.com/aaa」に対して、「/bbb/ccc」という値を渡す、つまり、「http://www.abe-tatsuya.com/aaa/bbb/ccc」という URI にアクセスさせる場合、「aaa」というスクリプトの中で、$ENV{'PATH_INFO'}を参照すると、その内容は「/bbb/ccc」となります。

なので例えば、「aaa」という CGI スクリプトの最初のほうに、

#-- PATH_INFO を「/」で分けて配列に格納
@params = split(/\//,$ENV{'PATH_INFO'});
shift(@params);

等とすれば、$params[0],$params[1]... の順番に、「/」区切りで渡された値が入ります。

PHP の場合は、$_SERVER['PATH_INFO']を参照すれば、同様に処理できます。

// PATH_INFO を「/」で分けて配列に格納
$params = split("/",$_SERVER['PATH_INFO']);
array_shift($params);

これで、perl と同様に、$params[0],$params[1]...の順番に、「/」区切りで渡された値が入ります。

後は、渡された値に応じて、出力内容を変えるように色々とスクリプトを書けば OK です。

関連するブログ記事
カテゴリー
.htaccess | PHP | SEO(検索エンジン最適化) | perl/CGI
タグ
.htaccess | CGI | ForceType | GETメソッド | PATH_INFO | perl | PHP | SEO | 環境変数

コメント(304) | トラックバック(1)

 

.htaccess で特定のファイルのみにBasic認証を設定する方法

今回の記事は、以前旧ブログから転載してきた.htaccessによるBasic認証のかけ方の続編です。

.htaccess とは

Webサーバー(Apache)の挙動を、ディレクトリ単位で指定するための設定ファイルです。

「.htaccess」という名前のテキストファイルを、該当ディレクトリにFTPでアップロードしたり、TelnetやSSH等でログインして、vi 等のエディタで直接作成・編集すればOKです。

.htaccess を設置すると、そのディレクトリと、その下層に位置する全てのディレクトリに、.htaccess で指定した設定が反映されます。

Basic認証とは

特定のディレクトリやファイルに対するアクセスに対して、CGI等の動的なコンテンツを用いることなく、ユーザー名とパスワードを要求して認証を行うことのできる手法です。

Webサーバー側の機能として提供される認証方法なので、プログラミング等の知識を必要とせず、比較的簡単にユーザー認証を行なうことが出来ます。

Basic認証のかけられたディレクトリやファイルにアクセスすると、ユーザー名とパスワードを入力するためのダイアログが表示され、正しいユーザー名とパスワードを入力しないと、そのディレクトリやファイルを閲覧することができません。

ディレクトリ単位での、基本的なBasic認証のかけ方に関しては、前述の記事.htaccessによるBasic認証のかけ方を参照のこと。

今回は、さらにもう一件、先日旧ブログから転載してきた記事、特定のファイルに対するアクセス制限と組み合わせて、「特定のファイルのみに Basic認証をかける」という応用編です。

特定のファイルのみに Basic認証をかける

例えば、今ご覧になっているこのブログを管理している Movable Type をはじめとする、Web上で管理を行なうCMSの管理用CGI。

当然ながら、インターネット上で管理していますから、管理者用のログインフォームには、URLさえわかれば誰でもアクセスできるわけです。

もちろん、そこから先の画面には、ユーザー名やパスワードを入力してログインするので、誰でも見られるわけではないですが、この管理者用のプログラムだけに Basic認証をかけることができれば、よりセキュリティの強度は高まります。

その他にも、サイトの構成上の都合によって、ディレクトリ単位ではなく、ファイル単位で Basic認証をかけたい、というケースは、意外とあるかと思います。

ちょっとおさらいしておくと、まず基本的な Basic認証のかけ方は、

AuthUserFile	/home/amethyst/data/pass/password.dat
AuthName	"Input Your Name And Password"
AuthType	Basic
require	valid-user

こんな感じです。

それぞれの項目の詳細については、.htaccessによるBasic認証のかけ方を参照してください。

そして、基本的なファイル単位でのアクセス制限の方法は、

<Files filename>
order deny,allow
deny from all
</Files>

という感じです。

こちらも詳細は、特定のファイルに対するアクセス制限を参照してください。

ここでのミソは、

  • require」で指定したユーザーに対して Basic認証を行う
  • <Files>~</Files>」で指定したファイルに対してアクセス制限を行なう

という2点です。

つまり、該当ディレクトリ内のファイルの中で「admin.cgi」というCGIスクリプトだけに Basic認証をかけたい、という場合、

AuthUserFile	/home/amethyst/data/pass/password.dat
AuthName	"Input Your Name And Password"
AuthType	Basic
<Files admin.cgi>
require	valid-user
</Files>

と書けば良いわけです。

関連するブログ記事
カテゴリー
.htaccess
タグ
.htaccess | Basic認証 | CMS | アクセス制限

コメント(23) | トラックバック(2)

 

自作のエラードキュメント表示方法

久しぶりに旧ブログから .htaccess ネタを引っ張ってきました。


.htaccessを使って、404や403、500等のエラードキュメントを自作の物に変更することが可能です。

設定は非常に簡単。
とりあえずオリジナルのエラードキュメントを作った後、.htaccessに下記のフォーマットで記述するだけです。

ErrorDocument ErrorCode DocumentPath

例えば、404エラーの際に表示されるエラードキュメントを404.htmlというファイル名で作成し、/err というディレクトリにアップロードした場合は、

ErrorDocument 404 /err/404.html

となります。

エラードキュメントのファイルは別に静的なhtmlファイルじゃなくてもOKなので、cgiやPHPを使って動的なエラードキュメントページを表示することも可能です。
REQUEST_URI や HTTP_REFERER 等、環境変数も通常通りに取得できるので、リクエストされたファイル名を表示したり、リンク元のファイルをログに取るようにして自サイトのリンク切れ・リンクミスチェックに利用することも可能です。
しっかりデバッグしておかないと、500エラーが出た時に表示されるエラードキュメント用CGI自体が500エラーが出てしまう、なんていう間抜けなことにもなりかねないので注意(笑)。
※ちなみにこういうケースの場合はサーバーにデフォルトで設定されているエラードキュメントが表示されます。(無限ループになっちゃったら嫌過ぎますもんね)

この「自作のエラードキュメントを表示する」というのはサイト管理者としても何だか無性に楽しいので、最近では色んなサイトで個性的なエラードキュメントが表示されますね。

関連するブログ記事
カテゴリー
.htaccess
タグ
.htaccess | 403 | 404 | 500 | CGI | perl | PHP | エラードキュメント | 環境変数

コメント(215)

 

リクエストのリダイレクト

2007年10月 4日 01:44 リクエストのリダイレクト

今回も旧ブログからの転載です。


サイトの構成を変更したり、サーバーを移転してURIが変更になった時などに、.htaccessを使って簡単に移転後のページへリダイレクトさせることができます。

例えば、

Redirect permanent /olddir/oldpage.html http://www.amethyst-web.org/newdir/newpage.html

と記述した.htaccessを私がこのサーバー上に置いておくと、http://www.amethyst-web.org/olddir/oldpage.htmlへのアクセスは自動的にhttp://www.amethyst-web.org/newdir/newpage.htmlへとリダイレクトされます。
※上記の例でいう/olddir/oldpage.htmlの部分はURIフルパスで記述しなければなりません。

また、リダイレクト元・リダイレクト先を共にディレクトリに指定した場合、そのディレクトリ以下のファイル全てにリダイレクトが有効となります。
例えば、

Redirect permanent /olddir/ http://www.amethyst-web.org/newdir/

と設定しておけば、http://www.amethyst-web.org/olddir/page1.htmlへのアクセスはhttp://www.amethyst-web.org/newdir/page1.htmlにリダイレクトされ、http://www.amethyst-web.org/olddir/page2.htmlへのアクセスはhttp://www.amethyst-web.org/newdir/page2.htmlにリダイレクトされます。

リダイレクト先のURIは同一ドメインである必要はないので、サーバー移転などでURIが変更になった時に便利です。
例えば、http://www.rentalserver.jp/~acount/からhttp://www.originaldomain.jp/に移転した場合、移転前のサーバーに

Redirect permanent /~acount/ http://www.originaldomain.jp/

という.htaccessを一つ作って置いておけば、http://www.rentalserver.jp/~acount/以下の全てのファイルへのアクセスをhttp://www.originaldomain.jp/以下の同一ファイルにリダイレクトできます。

関連するブログ記事
カテゴリー
.htaccess
タグ
.htaccess | リダイレクト

コメント(4)

 

DirectoryIndex の設定

2007年10月 3日 21:08 DirectoryIndex の設定

久しぶりに昔のブログからネタを引っ張ってきました。


大半のWebサーバーでは、URIの末尾にファイル名を指定せずに、ディレクトリ名までを入力してアクセスした際には index.html や index.htm 等を表示するよう設定されています。
この設定は、 .htaccess を使うことによって簡単に変更することができます。

例えば、

DirectoryIndex index.php

と書いた .htaccess を、 sample/ というディレクトリに置いた場合、
http://www.servername.com/sample/
は、http://www.servername.com/sample/index.php へのアクセスとなります。

別に index.*** でなくても、

DirectoryIndex toppage.html

とすれば、 http://www.servername.com/sample/toppage.html へのアクセスとなります。

また、複数のファイルを指定することも可能で、

DirectoryIndex index.php index.cgi index.shtml index.html index.htm

と設定した場合、index.php がない場合は index.cgi 、それもなければ index.shtml 、またもやなければ index.html 、これまたなければ index.htm へのアクセス、という風にサーバーが指定したファイルを左から順に探してくれます。
.htaccess は、設置したディレクトリ以下の全てのディレクトリに有効ですので、トップディレクトリにこういう具合に複数指定して置いておくと、その下の各ディレクトリに必要に応じて php なりcgi なり html なりを置くことができるので便利です。

また、そうして設定した各ファイルが全てない場合の挙動もサーバーの設定に依存します。
ディレクトリ内のファイルの一覧を自動的にリストアップするよう設定されているか、 403 Forbidden を返すよう設定されているかのどちらかが一般的です。

自動でリストアップする機能は、使い方によっては非常に便利(上記の例のようにわざわざページを用意しなくてもリストアップしてくれる)なのですが、意図せずディレクトリの中身を見られてしまって個人情報流出、という冗談みたいなとんでもないことをやらかすお間抜けな企業が後を断ちません(※そもそもブラウザでアクセスできる場所に個人情報が置いてあること自体が大問題です)。
基本的に 403 Forbidden を返すように設定する方が一般的な気がします。

さて、この設定も .htaccess にて変更可能です。

Options +Indexes

とすると、ディレクトリ内のファイルを一覧表示します。
逆に、

Options -Indexes

とすると、403 Forbidden を返します。

というわけで、基本的には403を返すようにしておき、リスティングが必要なディレクトリのみを +Indexes とするのが一番安全かと思います。

関連するブログ記事
カテゴリー
.htaccess
タグ
.htaccess | DirectoryIndex | 個人情報流出

コメント(3)

 

php.iniの設定を.htaccessで変更する。

PHPスクリプトの各種挙動に関する設定は、php.iniという設定ファイルによって、Webサーバー単位で管理されています。

複数のユーザーが利用しているレンタルサーバーの場合、各ユーザーが自分の都合によってphp.iniの設定を書き換えるようなことは、基本的にはできません。

そういうケースで、各ユーザーがphp.iniの設定とは異なる設定で、PHPを動かしたい場合、.htaccessを利用することで、それが実現できます。

PHPを置くディレクトリの.htaccessに、

php_flg なんとかかんとか on

とか、

php_value うんともかんとも ほげ

とかやります。

今までに世話になった項目としては、以下のようなものがあります。

php_flag magic_quotes_gpc Off

PHP側で、フォーム等から入力された引用符(ダブルクォーテーション「"」やシングルクォーテーション「'」)に対して、自動でバックスラッシュ「\」を頭につけてエスケープする処理が効いていた時に、その設定をオフにするために使いました。

php_flag output_buffering Off
php_value default_charset EUC-JP
php_value mbstring.language Japanese
php_flag mbstring.encoding_translation On
php_value mbstring.http_input auto
php_value mbstring.http_output EUC-JP
php_value mbstring.internal_encoding EUC-JP
php_value mbstring.substitute_character none

基本的に文字コードeucでPHPを動かすことが多かった頃、そのレンタルサーバーのデフォルトの文字コード設定がeucではなかったために、フォームから受け取った文字が化けまくった際に、この辺を指定したら直ったことがありました。

php_flag display_errors On

PHPのエラー表示機能がオフになっている設定のサーバーで、デバック時だけエラーを出したい、なんて時に頻繁に世話になります。

今回は以上で。
またネタに詰まった時にでも、続きを書きます。

関連するブログ記事
カテゴリー
.htaccess | PHP
タグ
.htaccess | PHP | php.ini | レンタルサーバー

コメント(9)

 

特定のファイルに対するアクセス制限

今回も.htaccessネタを旧サイトから引っ張ってきて転載です。


ネタがないので久々に.htaccessシリーズ。

.htaccessに下記のように記述することで、特定のファイルに対してアクセス制限をかけることができます。

<Files filename>
        order deny,allow
        deny from all
</Files>

filenameの部分にアクセス制限をかけたいファイル名を入れればOK。
これによって、ブラウザで閲覧できる場所にある設定ファイルなどに対してアクセス制限をかけることができます。
Webサーバーの設定によっては、ブラウザで.htaccessが閲覧できる状態になっている場合などもありますので、.htaccessは上記の方法でアクセス制限をかけておいた方が良いでしょう。

また、リモートホスト/IPアドレスでのアクセス制限で書いたように、「特定のファイル」を「特定ホストからのみ」アクセス制限、ということも可能です。

ファイル名には正規表現を使うことも可能です。

<Files ~ "regex">
...
</Files>

regexの部分に正規表現を入れることで「.から始まるファイル全てに制限をかける」「拡張子が.htmlのファイルに制限をかける」「拡張子が.gifか.jpgか.pngのファイルに制限をかける」といったことが可能です。

関連するブログ記事
カテゴリー
.htaccess
タグ
.htaccess | アクセス制限

コメント(6)

 

リモートホスト/IPアドレスでのアクセス制限

忙しいので今回も旧サイトからの転載です。すんません。


ちょうど良い機会なので(謎)。.htaccessシリーズ第二弾。

.htaccessに下記のように記述することで、特定のホスト及びIPアドレスに対してアクセス制限をかけることができます。

order allow,deny
allow from all
deny from aaa.bbb.ne.jp
deny from ccc.ddd.co.jp

これでaaa.bbb.ne.jpccc.ddd.co.jpというホストからのアクセスを制限することができます。
allow: アクセスを許可するホスト/IP
deny: アクセスを拒否するホスト/IP
です。
上記の場合は、「基本的に全部のアクセスを許可するけどaaa.bbb.ne.jpccc.ddd.co.jpからはアクセスしちゃ駄目」という意味になります。

逆に、特定のホスト/IPからのみアクセスを許可したい場合は、

order deny,allow
deny from all
allow from aaa.bbb.ne.jp

となります。
これは、「基本的に全部のアクセスを拒否するけどaaa.bbb.ne.jpからはアクセスしてOK」という意味になります。
自分専用のWebアプリケーションの管理ツール等を設置するディレクトリに設定しておくと良いですね。
もちろん、外出先等からその管理ツールにアクセスできなくなるという難点もあります。
他には、携帯専用サイトでDoCoMoやau、vodafoneのホストからのみ受け付けるよう設定する、とか。

allow及びdenyに指定できるホスト名は、後方一致でワイルドカード的に指定することができます。
aaa1.bbb.ne.jpやaaa2.bbb.ne.jp、aaa3.bbb.ne.jp等を一括でアクセス制限したい場合は

order allow,deny
allow from all
deny from .bbb.ne.jp

とすれば、ホストの末尾が.bbb.ne.jpからのアクセスを全て拒否できます。
ただし、この使い方は無関係な人までアクセス拒否してしまう可能性が非常に高いので、設定する場合はその辺を考慮に入れる必要があります。

allow及びdenyには、ホスト名だけでなくIPアドレスも指定できます。
IPアドレスをワイルドカード的に指定する場合は前方一致です。また、サブネットマスクによる範囲指定も可能です。

order allow,deny
allow from all
deny from 192.168.0.1
deny from 192.168.1.
deny from 192.168.2.0/255.255.255.0
deny from 192.168.3.0/16

こんな感じで。

「アクセス制限をかける」という行為自体が私はあまり好きではないのですが、誰でもデータベース内の情報を編集できる、所謂wikiのような「性善説系」サイトを長年やってると、やはり必要悪だなと特に改めて思わされますね。

関連するブログ記事
カテゴリー
.htaccess
タグ
.htaccess | アクセス制限

コメント(9)

 

.htaccessによるBasic認証のかけ方

さて、昨日書いた通り、早速前のサイトで書いていたTipsをこちらに移行し始めることにします。

まずは、.htaccessによるBasic認証のやり方。

以下は、旧サイトからの転載です。


便利なんだけど一度設定したらそれっきりなので、それほど頻繁に設定をするわけでもない.htaccess。
いざ使おうとすると「あれ、どうやるんだっけ」てな感じになることが多々あるので備忘録としてメモっておきます。

人から設定の仕方をよく訊かれたようなものを中心に。
ということで、まずはBasic認証のかけ方を。

Basic認証をかけるためには、.htaccessに記述する前に、認証用のユーザー名と暗号化されたパスワードの記述されたファイルを作成する必要があります。
SSHまたはtelnetでサーバーにログインし、任意のディレクトリに移動した後、以下のコマンドでパスワードファイルを作成します。

% htpasswd -c password.dat Amethyst
New password:password
Re-type new password:password
#-- 下記はレスポンス
Adding password for user Amethyst

password.datはパスワードファイル名。任意のファイル名を設定すること。
Amethystは設定するユーザー名。任意のユーザー名を設定すること。
passwordは設定するパスワード。任意のパスワードを設定すること。実際には入力したパスワードは表示されない。

上記作業が終わると、ユーザー名:Amethyst、パスワード:passwordのパスワードファイル password.dat が作成されます。

上記パスワードファイルにさらに別のユーザーを追加する場合は、htpasswdコマンドに -c オプションをつけずに実行すれば良いです。

% htpasswd password.dat Sapphire
New password:abcdefg
Re-type new password:abcdefg
#-- 下記はレスポンス
Adding password for user Sapphire

とすれば、さきほど作成したパスワードファイル password.dat にユーザー名:Sapphire、パスワード:abcdefgの情報が追加されます。

なお、htpasswdコマンドで作成したパスワードファイルのフォーマットは、
ユーザー名:パスワード(暗号化済)
という形式で1ユーザーにつき1行ずつ記述されるので、perlのcrypt関数等を利用して、cgiを経由して作成することもできます。
なので、telnetやSSHでのログインが許可されていないレンタルサーバー等を利用している場合も、こういうやり方をすればパスワードファイルは作成できます。

さて、パスワードファイルを作成したら、次はBasic認証をかけたいディレクトリに、以下を記述した.htaccessを設置します。

AuthUserFile    /home/amethyst/data/pass/password.dat
AuthGroupFile   /dev/null
AuthName        "Input Your Name And Password"
AuthType        Basic
<Limit GET POST HEAD>
require valid-user
</Limit>
AuthUserFile
先ほど作成したパスワードファイルのパスを指定します。
AuthGroupFile
グループファイルによる認証を行なう時に使用。
単にユーザー名とパスワードだけで認証を行なう場合は /dev/null (未定義)としておけばOK。
AuthName
ユーザー名・パスワード入力用のウィンドウに表示させるメッセージ。
スペースを含む場合はダブルクォーテーションで囲む必要がある。
2バイト文字を使用すると多分文字化けする。
AuthType
認証のタイプ。Basic認証をかける場合は Basic とする。
<Limit method>~~</Limit>
methodの部分に、認証をかけたいメソッドを指定。
GET,POST,HEADの各メソッドに対して認証をかけたい場合はGET POST HEADとする。
メソッドを指定しない場合は、<Limit>~~</Limit>は記述しなくて良いはず。
require
認証するユーザーを指定する。パスワードファイルに記述したユーザー全てに対して認証を行なう場合はvalid-userとする。
特定のユーザーのみを認証する場合は、そのユーザー名を記述する。上記の例の場合、Amethystと記述しておけば、ユーザー名Sapphireで正しいパスワードを入力しても、認証は通らない。

この.htaccessを認証をかけたいディレクトリに設置すれば、そのディレクトリ及び下位ディレクトリに対して、Basic認証が働くようになります。

関連するブログ記事
カテゴリー
.htaccess
タグ
.htaccess | Basic認証 | アクセス制限 | コマンドライン | シェル

コメント(13)