こしあん日記 ~写真と猫とサッカーと~

子供たちの記録用にはじめたが、思春期になり写真を撮らせてもらえなくなる。写真と愛猫とサッカーが中心のブログです。

.htaccessによる処理

.htaccessApacheが利用されているサーバでディレクトリ単位でサーバの設定を行う仕組みです。 通常、Apacheの設定はhttpd.confという設定ファイルで制御されていますが、ホスティング等でサーバを間借りしている時に全体とは違う設定に変えたい時などに利用します。 私が理解している(よく使っていた).htaccessの主な機能は以下の3つです。

  1. 基本(ベーシック)認証
  2. リダイレクト
  3. 拡張子変更

基本(ベーシック)認証は、.htaccessファイルを設置したディレクトリにアクセスしたときにユーザーIDとパスワードを求められる認証画面を表示します。 通常はパスワードを設定したファイル(.htpassword等)とセットで設置しますが、パスワードを設定したファイルはブラウザでは閲覧できない領域に設置しないとセキュリティレベルがかなり低下してしまいます。

リダイレクトは、.htaccessを設置したディレクトリ、もしくはそのディレクトリ内の特定のファイルにアクセスしたときに、指定したディレクトリやファイルを読みだす仕組みです。 利用シーンで多いのは、新しいサイトを作ったが、Googleなどの検索エンジンで古いサイト情報がキャッシュされており、消してしまうと「NotFound」になってしまうので、しばらくはこのリダイレクトを使って対応するなどです。 私の使用例は、あるサイトのあるコンテンツのみPHP+DBで構築したとき、今までそのコンテンツのトップファイルはindex.htmlでしたがシステム化することでindex.phpに変わりました。 そこで、index.htmlにアクセスしたときにindex.phpにリダイレクトするように設定しました。 このコンテンツページへのリンクが少ない場合は、リンクの書き換えでも対応できたのですが、かなりのページにリンクが貼られていることと、検索エンジンのキャッシュ対応にもなるため利用しました。 実際の記述方法は以下のようになります。

RewriteEngine on
RewriteRule ^index.html$ http://aaaaaaa.jp/bbbbbb/index.php [R=301,L]

この.htaccessファイルをhttp://aaaaaaa.jp/bbbbbb/に設置します。

最後に拡張子変更ですが、この表現が正しいのかは疑問ですが、具体的に言うと.htmlファイルで.phpと同じ動作がされるように変更することです。 大規模なサイトでヘッダー、サイドメニュー、フッター、コンテンツエリアというようなページ構成になっていたと過程します。 このとき、ヘッダーを変更するには静的なHTMLファイルの場合、全ページにまたがっているので全ページの変更が必要になります。 もちろん、作業としては一括置換処理で対応できるものの、確認作業は必要になるため結構な手間です。 そこで、PHPのincludeの仕組みを使えば、全ページ共通の部品を作ることができ、部品の変更のみで対応が可能になります。 制作段階でその設計思想のもとに設計されていればいいのですが、往々にしてそのようなことはなく、後で効率化のために対応するケースが多いはずです。 この時、問題は関連するファイル全てが.phpになってしまうことです。 そこで、.htmlのままでPHPの機能が使えるように.htaccessで設定します。

AddType application/x-httpd-php .html

まあ、しかしわざわざPHP化してinclude処理しなくてもpug(旧JADE)などのテンプレートエンジンを使えばまったく問題ないですね。

以上.htaccessによる処理でした。