- 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 の主な環境変数を示します。
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 なのです。
すると 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 に書き換える
|