こんにちは、WEBの佐野です。
今回はWEB制作で使用頻度が多いhtaccessについて基本的な使い方を紹介します。
ここでは使用頻度が高いリダイレクトと認証や、頻度は低めですが疑似静的と言われる方法などの要点をまとめて、コピペで使える様にしておくので是非活用してください。
htaccessとは
まず最初にhtaccessの基本的な役割を知っておきましょう。
htaccessは、ディレクトリ単位での制御が可能なapacheの設定ファイルになります。
htaccessで設定可能なものを参考までにいくつか紹介します。
・ページのアクセスに認証を設ける
・ページのリダイレクト
・PHPの設定変更
・ファイル等のキャッシュ設定
htaccessの設置方法と注意点
htaccessは設置が簡単で、かつサーバーの再起動も不要な、とても便利な設定ファイルです。
設置方法
「.htaccess」のファイルを作成します。
先頭に.(ドット)を付ける事で隠しファイルになります。
PCの設定によっては隠しファイルが作成出来ない場合もあるので、各自の環境に合わせて作成方法を調べてください。
小ネタとしては「.htaccess.」で作成すると、最後のドットが消えて手軽に作れるので私は普段この方法で作ってます。
作成ファイルはWEBサーバーの制御したいディレクトリ直下にアップロードするだけでOKです。
注意点
htaccessは設定の上書きファイルだと言う事を覚えておきましょう。
普段からPHPを使っている人や、apache環境を構築したことがある人ならイメージしやすいのですが、htaccessで出来る制御は別の方法でも制御できます。
PHPが動くapache環境を構築するとphp.iniやhttpd.confと言ったファイルが作成されて、これらのファイルでも同様の制御ができるので、リダイレクトなどの処理を色々な場所に書いてしまうと、後のトラブルにつながる可能性もあります。
設定ファイルを参照する優先度は以下の順番になるので、ある程度のルールを決めて運用しましょう。
php.ini < httpd.conf < .htaccess < php_ini(PHPの関数)
htaccessを使ってみよう
早速htaccessを使った、いくつかの処理を試してみましょう!
今回は以下の3つを紹介しています。
・リダイレクト
・ベーシック認証
・疑似静的URL
リダイレクト
主な使用場面は以下のもの。
・ティザーページなど一次的な画面への誘導
・URLの正規化(httpsやwwwへの統一)
特定のページにアクセスがあった時に、別のページに遷移させる方法です。
■htaccess
例)http/index.htmlへのアクセスを/index2.htmlへ遷移させる方法
#URL書き換えを可能にする RewriteEngine on #URLの書き換えルールを記述する index → index2 RewriteRule ^index.html$ https://●●●●●/index2.html [R=302,L]
●にはドメインを入れてください。
また、遷移先のURLは”http”もしくは”https”で始まる絶対URLを入れてください。
また、RewriteRuleの最後についている[]内の指定はオプションになります。
“L”はリダイレクトのルールに該当した場合に以降のルールを無視するオプションです。
“R”には301(恒久的)や302(一時的)を指定します。
・サイトの引っ越しなどは301
・メンテナンス画面への誘導などは302
用途に応じて適切に設定してください。
URLをwww有りに統一
URLにwwwにつける正規化を書いておきます。
↓
https://www.otwo.jp/にリダイレクト
RewriteEngine On #ホスト名にwwwが付いていなければ、次行のルールを適用 RewriteCond %{HTTP_HOST} ^otwo.jp RewriteRule (.*) https://www.otwo.jp/$1 [R=301,L]
この場合「http://www.otwo.jp」でのアクセス時はwwwが付いているので、3行名のリダイレクトは処理されません。
URLをhttpからhttpsに統一
こちらもよく使うのであわせて紹介しておきます。
httpでのアクセスをhttpsにリダイレクトする記述です。
↓
https://www.otwo.jp/にリダイレクト
RewriteEngine On #httpsではない場合、次行のルールを適用 RewriteCond %{HTTPS} off RewriteRule ^(.*)$ https://www.otwo.jp/$1
この場合「https://www.otwo.jp」でのアクセス時はhttpsでのアクセスなので、3行名のリダイレクトは処理されません。
ベーシック認証
主な使用場面は以下のもの。
・限定した人しか使用しないシステムのアクセス制限
WEBで開発する場合に、一般からのアクセスがない様にクロールを拒否するなどの根本的な対策も必要ですが、直URLなどの対策で使用します。
ベーシック認証を行う際には.httaccessと併せて、.htpasswdのファイルも必要になります。
.htpasswdはアクセスに必要なユーザIDやパスワードを記述するファイルになります。
■htaccess
#ベーシック認証 AuthUserFile ★フルパスを記述★.htpasswd AuthName "Member Only" AuthType Basic require valid-user
★で囲んだ場所には.htpasswdを設置している場所をフルパスで指定してください。
フルパスがわからない人は下記の手順で調べれるので試してください。
2.メモ帳に下記を記述する
<?php print __FILE__; ?>
3.ファイルの拡張子をphpにして保存する(fullpath.phpとか)
4.作成したファイルをhtpasswdと同階層にアップロードする
あとはブラウザでアクセスするとフルパスが表示されているのでhtaccessにコピペしてください。
作業後はフルパス調査用に作成したファイルは削除しておきましょう。
AuthNameは認証を促すダイアログを表示する際に表示されるメッセージになるので適当に変更してください。
■htpasswd
下記はID、PWともに”test”で設定している例になります。
test:hg.iKlWr6lAZ6
htpasswdには「ユーザ名」:「パスワード」の書式で記述します。
パスワードは暗号化する必要があるので「ベーシック認証 パスワード」などの検索でヒットするサイトを使って生成しましょう。
複数のユーザを作成する場合は、行を変えて追記するだけでOKです。
疑似静的
ブログやショッピングサイトの様にページ数が多い動的サイトのURLにパラメータを付けたくない時に使用します。
利用頻度としては少なそうですが、WEB制作の知識として知っていても良いかと思います。
疑似静的の具体的な動きですが以下の様な感じです。
↓
https://testdomain/index.html?category=testでアクセスされた様に内部的には処理する。
この様に内部的に動的ページでも、静的ページの様なURLで見せる事を疑似静的と呼んだりします。
■htaccess
RewriteEngine on RewriteRule ^([0-1a-z]*)$ index.php?category=$1
2行目の()で囲った範囲の文字列が$1に代入されます。
遷移元の()を増やすことで$2、$3と言った具合に変数を使用することができます。
今回は()内に正規表現を使っているので、英数小文字と数字を使ったURLであればGETパラメータとして処理される様になります。
この疑似静的は、少し前に静的URLの方がSEOに適していると言う事で使用されていたそうですが、現在は動的でも静的でもSEOの差がないと言われているので、好みで使い分けてください。
まとめ
htaccessはコピペで使い回す事が多いと思いますが、疑似静的など少し知識が必要な使い方なんかもあります。
なかなか知識を深堀する機会も少ないと思いますが、この記事が何かの参考になれば幸いです。
私も正規表現とか苦手意識があるので克服したいと思います!
ではまた!