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

 
1.2.1 概要
1.2.2 ports
1.2.3 .htaccess によるリダイレクトの基本
1.2.4 環境変数
1.2.5 http を https へリダイレクト
1.2.6 index.php を index.html へリダイレクト

1.2.1 概要

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

1.2.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 のオプションをチェックして


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

1.2.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 /		←	ベースディレクトリを指定

1.2.4 環境変数

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

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

1.2.5 http を https へリダイレクト

 これは「SSL 無料の証明書を取得」の項にも記述していますが、https 化したので http でアクセスしてくるものをすべて https へ転送するには

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

1.2.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 に書き換える