TOTAL:184, TODAY:184

Apache2.0のrewriteモジュール

当初、本サイトはHTMLファイル(*.html)で構成されていましたが、PHPのことを知るにつれ、すべてのページをPHPファイル(*.php)で作ることにしました。その場合、ファイルの中身がPHP化されてなくても問題ありません。しかし、検索エンジン等で既に上位にきている*.htmlのページが次のようなるのは嬉しくないですよね。

これまで通り、ブラウザでhttp://www.arakin.dyndns.org/****.htmlとされても、問題なくアクセスできるようにする方法を紹介します。***.htmlとアクセスされても、***.phpと置き換えるために、Apacheのrewrite機能を使います。まず、/etc/apache2/mods-available/rewrite.loadがあることを確認します。Apache2.0をインストールしていれば、きっとあると思います。rewriteはデフォルトではオフになっているので、次のコマンドで有効にします。

$ a2enmod rewrite

このコマンドにより、/etc/apache2/mods-enableにrewrite.loadというシンボリックリンクが作成されます。そして、***.htmlを***.phpに置き換えるルールを記述するために、Apache2.0のサイト設定用ファイル/etc/apache2/sites-available/defaultを編集します。

#       DocumentRoot /var/www/
        DocumentRoot /mnt/www/
        <Directory />
                Options FollowSymLinks
                AllowOverride None
        </Directory>
#       <Directory /var/www/>
#               Options Indexes FollowSymLinks MultiViews
#               AllowOverride None
        <Directory /mnt/www/>
                Options FollowSymLinks MultiViews
                AllowOverride All
                Order allow,deny
                allow from all
                RewriteEngine On                           <-- ①
                RewriteBase /                              <-- ②
                RewriteRule ^(.*)\.html$ $1\.php [L]       <-- ③
                # RewriteRule index\.html index\.php [L]   <-- ④
                # This directive allows us to have apache2's ....
                # in /apache2-default/, but still have / go to ....
                # RedirectMatch ^/$ /apache2-default/

①でrewrite機能を有効にします。②でトップディレクリからのベースとなるURLを記述します。ここでは、トップディレクリ以下すべて***.phpに変更したいので、こうしました。③が変換規則で、正規表現を使用しています。rewriteの詳しい説明は、下記のサイトで紹介されています。

もしあるページだけ置き換えたいならば、④のようにします。④は、index.htmlをindex.phpに置き換えるための規則です。これで終わりかな?と思っていましたが、Subversionを使用しているならば、次のような設定も必要であることがわかりました。

<Location /svn>
 :   :  途中略  :   :
  # Set this to the path to your repository
  # SVNPath /var/lib/svn
  SVNParentPath /mnt/svn
  # SVNPath /mnt/svn
  Options Indexes
  Order allow,deny
  allow from all
  RewriteEngine Off        <- 追加①
 :   :  途中略  :   :
</Location>

理由はよく分かりませんが、Subverionの設定ファイル/etc/apache2/mods-availableでは、rewriteを無効にしないと、コミットが失敗するみたいです。この後、次のようにApache2を再起動します。

# /etc/init.d/apache2 restart

私の場合、rewrite機能を/etc/apache2/sites-available/defaultで行いましたが、.htaccessでも可能なようです。但し、試したことはありません。今回は、Apacheのrewrite機能で、ファイル名の置き換えを行いましたが、もっといい方法があるかもしれません。

最新の7件

OpenGL

電子工作

玄箱HG

ホームページ

日記

Copyright (C) 2007 Arakin , All rights reserved.