HOME » 備忘録 » 2017 » .htaccessに関するメモ

.htaccessに関するメモ

ある程度書き貯めたらリダイレクト系や認証系で分けられたらいいなー

作成日時:2017-10-09 / 最終更新:2017-12-19

優先順位について

各ディレクトリに.htaccessを設置する場合の優先順位について、まず最初にhttpd.confに書かれているものが読み込まれます。
その後ドキュメントルートに近いほうから順に.htaccessが存在するか確認しながら読み込んでいく。
この時注意するのは読み込みについては引き継がれていくということ。

上層にある.htaccessで指定した内容は、その下層にあるディレクトリやファイルに影響を与えるということを意識する。
なにか干渉するような記述がある場合は、設定を上書きする必要があります。
また、存在しようがしまいが、Apacheはそこのパスまでのディレクトリ毎に対して.htaccessが存在するか確認するためオーバーヘッドが発生する。
Apache公式マニュアルとしても.htaccessで書かないで.confファイルに記述したほうが早いよ!と推奨しているが、便利なので却下です。

Apacheの初期設定では.htaccessファイルの使用は無効になっています。

httpのアクセスをhttpsへのリダイレクト

HTTPでアクセスがあった場合にHTTPSへリダイレクトさせます。
この時HTTPSのポートを443番ではない運用を行っている場合、リダイレクトループが発生するので環境に合わせて設定してください。
また、リダイレクトの種類を指定していないので302(一時的な)転送になります。

RewriteEngine On
# 条件:443ポート以外での接続であった場合
RewriteCond %{SERVER_PORT} !^443$
# パスを引き継いでhttpsへ転送
RewriteRule ^.*$ https://%{SERVER_NAME}%{REQUEST_URI} [L,R]

BASIC認証の設置

パスワードファイルを作成、BASIC認証時に使えるアカウントは以下の手順で作成する。
パスワードファイルについて、ドキュメントルートの境界外に設置すること。
username -> 作成したいユーザ名
passwd -> パスワード(この段階で入力しなくても対話式での設定が可能、historyに残したくない場合などは入力しない。)

touch /var/www/.htpasswd
htpasswd -b /var/www/.htpasswd username password

BASIC認証を設置するために、.htaccessへ追記。
仕様上、ドキュメントルートに近い.htaccessが優先になるため、設置したディレクトリ内と、それ以降の階層に対してBASIC認証が適応されます。
AuthUserFile -> 上記で作成したパスワードファイル

AuthType Basic
AuthName "Auth"
AuthUserFile /var/www/.htpasswd
AuthGroupFile /dev/null
require valid-user

環境変数を設定する

定数的な使い方ができるので便利な反面、まったく知らない人に引き継ぐとハマる可能性がある方法。
多言語モジュールなんかでこんなの使ってうまいことやれないかメモしておく。

Setenv "DBConnectString"                "mysql://hoge:hoge@127.0.0.1/hoge"

phpからはgetenv関数でその値を取得することができる。

getenv("DBConnectString");

条件にメソッドを指定してリダイレクトする

固有のPHPで作成されたログイン画面を移設する際に、ログインリクエスト(POST)は通してページ表示をリダイレクトしたい場合に使用。

RewriteCond   %{REQUEST_METHOD} ^(GET|HEAD|OPTIONS)$
RewriteRule ^hogehoge.php$ /hogehoge.html [R=302,L]

特定のIP以外からのアクセスを弾く

なんか適当なプログラムを設置した場合。

<Files ~ "^test\.php$">
order deny,allow
deny from all
allow from 192.168.0.1
</Files>