8. FreeBSD 11.1 RELEASE - apache24 - リダイレクション

 
 サーバのファイルを頻繁に更新していると煩雑になり、整理した結果、コンテンツが以前の場所と違うため、以前にアクセスしていた人が訪れると 404 のエラーになることが多々あります。  html ファイルでリダイレクションさせることもできますが、いちいち html ファイルを作成するのは骨が折れますし、結局、ディレクトリ内がごちゃごちゃしてしまいます。  apache の機能を使ってリダイレクトさせることで1ディレクトリもしくは1ファイル分を1行でリダイレクトさせることができます。
8.1 mod_alias、mod_rewrite
8.2 インデックスのリダイレクト
8.3 ファイルのリダイレクト
8.4 index.php を index.html へリダイレクト

8.1 mod_alias、mod_rewrite

 以降の処理を行うには、apachemod_alias がインストールされていることが前提となります。  デフォルトで mod_alias はインストールされていると思いますが
/usr/local/libexec/apache24/mod_alias.so
/usr/local/libexec/apache24/mod_rewrite.so
 が存在すること。
/usr/local/etc/apache24/httpd.conf
 で

LoadModule alias_module libexec/apache24/mod_alias.so
LoadModule rewrite_module libexec/apache24/mod_rewrite.so
 の行がコメントアウトされないことを確認しておいてください。(2行が連続しているわけではありません)  コメントアウトされていれば、コメント文字を外し、インストールされていなければ

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

> make deinstall
> make
> make install
 してください。

8.2 インデックスのリダイレクト

 これは移動とは少し異なりますが、http://www.hogehoge.ne.jp/ のドキュメントルートが
/usr/local/www/apache24/data
 としてこの配下にごちゃごちゃものを置きたくなくて http://www.hogehoge.ne.jp/site/ へのアクセス先を
/usr/local/www/site
 配下に置きたい場合、
/usr/local/etc/apache24/httpd.conf
 に記述することも可能ですが、サブディレクトリごとに設定したい場合
/usr/local/etc/apache24/Include/site.conf
 を作成して中に以下のように記述します。

Alias /site 	/usr/local/www/site/

<Directory "/usr/local/www/site">
    Options ExecCGI -Indexes +Includes
    AllowOverride All
    Require all granted
</Directory>
 オプションは個々のサイトにあった設定にします。  設定ファイルのチェックを行って問題がなければ再起動します。

> /usr/local/etc/rc.d/apache24 configtest
> /usr/local/etc/rc.d/apache24 restart

8.3 ファイルのリダイレクト

 個々のファイルをリダイレクトさせるには、例えば
/usr/local/www/site/site1.html
 を
/usr/local/www/site/site01.html
 に変更した場合
/usr/local/etc/apache24/Include/site.conf
 に以下を記述します。

Redirect /site/site1.html	/site/site01.html
 でリダイレクトできます。  php ファイルへの引数をつけることもできます。この場合、注意すべきは html で記述する場合「?引数1=値1&amp;引数2=値2」と記述しますがリダイレクトの記述の場合「?引数1=値1&引数2=値2」とエスケープさせないで記述します。

8.4 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
 というのがやたら出るのです。  これを解消するにはまず、ディレクトリ定義箇所で Allowoverride を All にします。

<Directory "/ディレクトリ名">
	・・・
	Allowoverride	All
	・・・
</Directory>
 つぎに対象のディレクトリのルートに .htaccess を作成して、以下のように記述します。

RewriteEngine On                    ← 書き換えのエンジンを起動
RewriteBase /                       ← ベースディレクトリを指定
RewriteCond %{REQUEST_FILENAME} !-f ← もしターゲットのファイル名がなければ
RewriteRule index\.php index\.html  ← index.php を index.html に書き換える
 後は、apacheconfigtestrestart でうまくリダイレクトできるようになります。