FreeBSD 10.2 RELEASE - apache - リダイレクション


クラウディア 

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

1. mod_alias、mod_rewrite
2. インデックスのリダイレクト
3. ファイルのリダイレクト
4. index.php を index.html へリダイレクト

1. mod_alias、mod_rewrite

 以降の処理を行うには、「apache」に「mod_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
 してください。

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
 再起動します。

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」とエスケープさせないで記述します。

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

<Directory "/[・・・]">
	・・・
	Allowoverride	All
	・・・
</Directory>
 つぎに対象のディレクトリのルートに「.htaccess」を作成して。

RewriteEngine On
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule index\.php index\.html
 1行目:「RewriteEngine」を起動  2行目:ベースディレクトリを指定  3行目:もしターゲットのファイル名がなければ  4行目:「index.php」を index.html に書き換える。  後は、「apache」の「configtest」と「restart」で、うまくリダイレクトできるようになります。

earthcar(アースカー)