メンテナンス・トラブルシュート - ウェブサーバ - .htaccess による制御 - リダイレクション

 クラウディア
1. 概要
2. ports
3. .htaccess によるリダイレクトの基本
4. 環境変数
5. http を https へリダイレクト
6. index.php を index.html へリダイレクト

1. 概要

 ウェブサーバのファイルを頻繁に更新していると煩雑になり、整理した結果、コンテンツが以前の場所と違うため、以前にアクセスしていた人が訪れると「404」のエラーになることが多々あります。  「404」の対策として、「.html」ファイルでリダイレクションさせることもできますが、いちいち「.html」ファイルを作成するのは骨が折れますし、結局、ディレクトリ内がごちゃごちゃしてしまいます。  「apache」の機能を使ってリダイレクトさせることで1ディレクトリもしくは1ファイル分を1行でリダイレクトさせることができます。  この項は以下のサイトを参考にさせていただきました。
Apache RewriteCond の基礎知識

2. ports

 以降の処理を行うには、apache に mod_rewrite がインストールされていることが前提となります。

/usr/local/libexec/apache24/mod_rewrite.so
 が存在することと

/usr/local/etc/apache24/httpd.conf
 で

LoadModule rewrite_module libexec/apache24/mod_rewrite.so
 の行がコメントアウトされないことを確認しておいてください。  コメントアウトされていれば、コメント文字を外し、インストールされていなければ

cd /usr/ports/www/apache24
make config
 で REWRITE のオプションをチェックして
「/usr/ports/www/apache24」「make config」


make deinstall
make
make install
service apache24 configtest	←	定義に誤りがないかチェック
service apache24 restart	←	再起動

3. .htaccess によるリダイレクトの基本

 書式の基本形は

RewriteEngine On
RewriteBase /
RewriteCond %変数名(テスト文字列) 条件パターン(正規表現) [フラグ]
RewriteRule ここにRewriteRuleのURL書換&転送設定を記述
 1行目は Rewrite エンジンを有効化させるもので必須です。  2行目は対象とするディレクトリを指定するもので、必須ではありませんが、ディレクトリごとに設定を変える場合は、個別に記述して以下の業を記述します。  .htaccess を設置しているディレクトリが / になります。  3~4行目はセットになります。  1つないしは複数の RewriteCond で示す条件下の。  RewriteRule で示す URL を転送する設定を記述します。  .htaccess の記述を変更した場合は apache の再起動は不要で、即時反映されます。  以降、下記の2行は省略していますのでご注意ください。

RewriteEngine On	←	書き換えのエンジンを起動
RewriteBase /		←	ベースディレクトリを指定

4. 環境変数

 基本書式で書いている %変数名 には %{環境変数} の形式で apache の定義する環境変数が使用できます。  わたしの使用している apache の主な環境変数を示します。
apache 環境変数

グループ  変数名    意味  
HTTP ヘッダ HTTP_HOST サーバホスト名
その他 HTTPS https か否か
REQUEST_FILENAME リクエストされたファイル名
REQUEST_URI リクエストされた URI

5. http を https へリダイレクト

 これは「FreeBSD - メンテナンス・トラブルシュート - SSL 無料の証明書を取得」の項にも記述していますが、https 化したので http でアクセスしてくるものをすべて https へ転送するには

RewriteCond %{HTTPS} off									←	https でなかったら
RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [R,L]	←	すべて https へ

6. index.php を index.html へリダイレクト

 これはまさにこのサイトで行ったことですが、インデックスを index.php にしたり index.html にしたりしておりました。  で、今は index.html なのです。  すると http://freebsd.sing.ne.jp/ に対してアクセスしてくれれば問題ないのですが。  http://freebsd.sing.ne.jp/index.php にブックマークしたり、検索エンジンで index.php を置いているところがあるようで。エラーログに

・・・ [error] [client ] script '/.../index.php' not found or unable to stat
 というのがやたら出るのです。  対策として .htaccess に以下の記述をしました。

RewriteCond %{REQUEST_FILENAME} !-f	← もしターゲットのファイル名がなければ
RewriteRule index\.php index\.html	← index.php を index.html に書き換える
ハイスピードプラン