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

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