skillup

技術ブログ

サーバー・ネットワーク

mod_rewriteについて

投稿日:2017年6月1日 更新日:

本日はapacheのmod_rewriteについて。

例えばget句に郵便番号を付けて、住所を出力するWEBプログラムがあるとします。

この場合、そのままだと http://sampledomain.com/sampleapp/public/address.php?zip=1048404 ですが、こういったURLを http://sampledomain.com/sampleapp/public/address/1048404 でアクセスしたいとします。

こんな時に必要になるのが http://sampledomain.com/sampleapp/public/address/1048404 でアクセスし、内部で http://sampledomain.com/sampleapp/public/address.php?zip=1048404 と書き換える機能です。

これはapacheのmod_rewriteというモジュールで行います。

Apache2.4系を前提に説明します。(検索するとこれ以前のものが多く出てきますんで逆に2.4以前のものの情報には困らないかと思います。)

一応過去のブログを参考リンクに。
サーバー設定ファイルについて apache

mod_rewrite

/etc/httpd/conf.modules.d/00-base.conf

ここに下記のようにモジュールが組み込まれていればOKです。

あとはphpinfoで見て、Loaded Modulesのなかにmod_rewriteが書かれていればOKです。

デバッグ

URLのrewriteの場合、プログラムと違って中がどうなっているのかを把握するのが難しいので情報をログから取るしかありません。ログへの出力の抑制などは下記を/etc/httpd/conf/httpd.confにかいてあげればOKです。

※注意点としては先ほどのmodule読み込みよりも後に書かないと反映されません。

またどのくらいの情報を出力できるかをコントロールできます。出力レベルはdebug~emergeまであります。具体的には下記を参照

http://httpd.apache.org/docs/2.4/ja/mod/core.html#loglevel

またrewriteの情報も出力レベルが1~8まであり、数字が大きいほど詳しいです。

ログのパスなどは2.4系では自動的にapacheのerror_logに吐かれます。また具体的なURLのrewriteはアプリのディレクトリ直下に.htaccessをおいてこれで管理することがほとんどですので、.htaccessが機能するようにしておきましょう。

.htaccess

具体的なrewriteなどはアプリのディレクトリ直下のhtaccessに記述することが多いです。

今回のケースの場合、 /var/www/html/sampleapp/public/address.php にプログラムがあるとすると、htaccessのパスは /var/www/html/sampleapp/.htaccess になります。

ここで下記のように記述します。

具体的なrewriteのルールを知りたい場合は以前も紹介しましたが、下記のリンクが詳しいです。

.htaccess の書き方

Apacheのmod_rewriteモジュールの使い方を徹底的に解説

【mod_rewrite】 RewriteBaseとは?

ログには具体的に下記のようにリダイレクトが吐かれます。リダイレクトがうまくいっていないときはここで一回一回確認しましょう。

mod_rewriteのウェブサービス

まだリダイレクトをすぐに調べられるサービスもあるようなのでこれを活用するのもいいと思います。

Mod Rewrite Generator
まずはサンプルのURLをいれて挙動を確認してみましょう。.htaccessを自動で吐いてくれます。

Test your htaccess rewrite rules

get句を含んだURLとhtaccessの記述内容に合致しているかをすぐに判定してくれます。いちいちブラウザをたたくよりこっちのほうが便利かも・・

注意点

htaccessの場合、一度設定するとブラウザがキャッシュしてしまい、書き換えてもなかなか反映されないことが多いです。

その場合、ただのリロードや一般的なリロード(F5/Ctrl+F5)では解決しないことが多いです。

chromeでは以下のステップでキャッシュをクリアできます。

  • F12で開発ツールを出す
  • URLバーの横にあるマークを長押し
  • キャッシュの消去とハードの再読み込み

【Chrome】ブラウザの頑固なキャッシュを完全に削除するスーパーキャッシュクリア方法

ちなみにIEとfirefoxでは地道に設定画面からキャッシュをクリアするしかないようです。メンドイ・・・

-サーバー・ネットワーク
-, ,

執筆者:


comment

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

関連記事

no image

herokuでのhttpd.conf設定

前回の記事でLet’s EncryptでSSL設定する場合、 http://ドメイン/.well-known/ というURLにアクセスする必要があります。 ただherok …

no image

herokuでMySQL

昨日に続き、heroku+MySQLのメモです。 herokuはディフォルトではPostgreSQLですが、アドオンを使うとMySQLも使えるようになります。 使い方ですが、herokuの管理画面でク …

no image

rewriteディレクティブ

リクエストURIを条件に応じて書き換えたり、リダイレクトする機能を使うときはrewriteを使います。こちら非常によく使う機能です。 具体的な例を見ていきましょう。 [crayon-600fe2e8b …

no image

大規模Webサービス技術入門 DBの分散

前回に引き続き、大規模サービスを運用するときに必要になるMySQLの知識についてのまとめ Contents1 テーブル・SQL設計2 レプリケーション機能3 パーティショニング テーブル・SQL設計 …

no image

IaC(Infrastructure as Code)に関して

近年ではインフラ環境もコード化しておいて、コマンドで起動や構築できることが一般的ですね。 ansibleやdockerなどは色々と使っていましたが、実際のインフラ環境では2020年6月現在AWSを使う …