当サイトの「郵便番号住所検索サービス」サンプルの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/webservice/getaddress/370/
を実行すると、CSV形式で郵便データがリターンされます。
また、以下の形式でも同じ結果が得られます。
https://www.northwind.mydns.jp/samples/webservice/getaddress.php?zipcode=370