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&引数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」で、うまくリダイレクトできるようになります。