.htaccessについて | PHP Labo

.htaccessについて

トップ > 設置の基本 > .htaccessについて

.htaccessの内容

PHP Labo で配布しているプログラムは、.htaccessファイルで色々な設定を行っています。.htaccessは、Apacheなどのサーバーソフトで利用できる、サーバーの動作設定を行うファイルです。サーバー上の任意の場所に .htaccess という名前でファイルを作成し、色々な設定を記述することができます。

各配布プログラムに付属している.htaccessの内容は以下のとおりです。

Options -Indexes
DirectoryIndex index.php

<Files ~ "\.(db|log|ini)$">
  Deny from all
</Files>

<IfModule mod_rewrite.c>
  RewriteEngine On
  RewriteCond %{REQUEST_FILENAME} !-f
  RewriteCond %{REQUEST_FILENAME} !-d
  RewriteRule (.*) index.php/$1
</IfModule>

php_flag register_globals Off
php_flag magic_quotes_gpc Off

php_value default_charset UTF-8
php_value mbstring.input_encoding pass
php_value mbstring.internal_encoding UTF-8
php_value mbstring.output_encoding pass
php_value mbstring.language Japanese
php_value mbstring.substitute_character none

php_flag session.use_trans_sid Off
php_flag session.use_cookies On
php_flag session.use_only_cookies On
php_flag session.auto_start Off

php_value error_reporting 039
php_flag display_errors Off
php_flag display_startup_errors Off
php_flag log_errors On
php_value error_log "./error.log"

基本的には編集せずにそのまま利用すればOKですが、mod_rewriteを利用する場合、エラーログファイルへのパスを修正しておくことを推奨します。

設定内容解説

ファイル一覧の設定

Options -Indexes

ファイル名を省略してディレクトリにアクセスした場合、index.html などが無くてもファイル一覧を表示しません。(不正アクセス対策。)

DirectoryIndex index.php

ファイル名を省略してディレクトリにアクセスした場合、index.php があればそのファイルを表示します。

ファイルアクセスの設定

<Files ~ "\.(db|log|ini)$">
  Deny from all
</Files>

拡張子が dblogini のファイルへの直接アクセスを禁止します。(不正アクセス対策。)

mod_rewriteの設定

<IfModule mod_rewrite.c>
  RewriteEngine On
  RewriteCond %{REQUEST_FILENAME} !-f
  RewriteCond %{REQUEST_FILENAME} !-d
  RewriteRule (.*) index.php/$1
</IfModule>

http://www.example.com/index.php/view/5 のようなURLに、http://www.example.com/view/5 のようなURLでアクセスできるようにします。

PHPの動作設定

php_flag register_globals Off

想定外の変数に値が格納されないようにします。(変数汚染対策。)

php_flag magic_quotes_gpc Off

入力データが自動的にエスケープされないようにします。エスケープ処理は、必要に応じて各プログラム側で行っています。

文字コードの設定

php_value default_charset UTF-8
php_value mbstring.input_encoding pass
php_value mbstring.internal_encoding UTF-8
php_value mbstring.output_encoding pass
php_value mbstring.language Japanese
php_value mbstring.substitute_character none

デフォルトの文字コードをUTF-8に設定します。(文字化け対策&UTF-7 XSS 対策。)

セッションの設定

php_flag session.use_trans_sid Off
php_flag session.use_cookies On
php_flag session.use_only_cookies On
php_flag session.auto_start Off

セッションをCookieでのみ扱うようにします。(セッションハイジャック対策。)

エラー出力の設定

php_value error_reporting 039
php_flag display_errors Off
php_flag display_startup_errors Off
php_flag log_errors On
php_value error_log "./error.log"

PHPプログラムのエラー情報をブラウザに表示せず、プログラムと同じディレクトリにある error.log へ出力するように設定します。(パス情報や脆弱性情報の漏洩対策。)

なお、.htaccessではエラーレベルを定数で指定できないので、上のように数値で指定します。以下は定数と数値の比較です。必要ならば、表を参考にしてエラーレベルを変更してください。

定数表現 数値表現
E_ALL 2047
E_ALL & ~E_NOTICE 039
E_ALL | E_STRICT 4095