CentOS5x Apache mod_rewrite の設定

当サイトの「郵便番号住所検索サービス」サンプルのURL パラメータ(“yubin/?zipcode=1234123”) を階層として (“yubin/1234123/” ) 使用できるように、 mod_rewrite を使ってURLを置き換ています。

その方法をご紹介します。

mod_rewrite のインストールと有効化

まずは、mod_rewrite がインストールされているかを確認します。

CentOS インストール時または、後から apache を yum コマンドでインストールした場合は、mod_rewriteは入っていると思います。 下記フォルダを確認して、mod_rewrite.so があればインストールされています。

# ll /etc/httpd/modules/mod_rewrite.so

次に、httpd.conf で、mod_rewrite モジュールが読み込まれているかを確認します。コメントにされている場合は、コメントを外します。

--- httpd.conf 抜粋 ---
#
# Dynamic Shared Object (DSO) Support
#
# To be able to use the functionality of a module which was built as a DSO you
# have to place corresponding `LoadModule' lines at this location so the
# directives contained in it are actually available _before_ they are used.
# Statically compiled modules (those listed by `httpd -l') do not need
# to be loaded here.
#
# Example:
# LoadModule foo_module modules/mod_foo.so
#
...(省略)...
LoadModule rewrite_module modules/mod_rewrite.so
...(省略)...

mod_rewrite の設定

冒頭で説明したとおり、

.../yubin/getaddress/1234567/

へアクセスにきたら:

.../yubin/getaddress.php?zipcode=1234567

を実行し、ブラウザのURL表示はもとのURL(アクセスしたURL)を表示する。

これを実現するために、以下の yubin.conf を作成して、/etc/httpd/conf.d/ ディレクトリに配置します。

--- .htaccess ---
<Directory /wwwroot/samples/yubin>
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^getaddress/([0-9]+)/?$ getaddress.php?zipcode=$1 [L]
</Directory>
--------------------------

RewriteEngine ディレクティブは、リライト(書き換え)エンジンを無効 (Off) または、有効化(On)にします。

RewriteCond ディレクティブは、ルールの条件を指定します。 %{REQEST_FILENAME} はサーバー変数(Server Variables) の一つで、上記の例の場合、ファイルが存在しないか、ディレクトリが存在しない場合にルールを適用するということになります。

RewriteRule はディレクティブはルールを記述します。アクセスにきた getaddress 以下の階層ディレクトリを正規表現で一致したパターンのURLに書き換え実行します。

ここで、apache を再起動します。

# service httpd restart

動作確認

https://www.northwind.mydns.jp/samples/yubin/getaddress/370/

を実行すると、CSV形式で郵便データがリターンされます。

また、以下の形式でも同じ結果が得られます。

https://www.northwind.mydns.jp/samples/yubin/getaddress.php?zipcode=370

ディスカッションに参加

1件のコメント

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください