メンテナンス・トラブルシュート - ウェブサーバ - .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」の主な環境変数を示します。
グループ 変数名 意   味
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」なのです。  すると「https://freebsd.sing.ne.jp/」に対してアクセスしてくれれば問題ないのですが。  「https://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 に書き換える
ハイスピードプラン