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

locationディレクティブについて

nginxを実務で使うときに重要になってくるlocationディレクティブについて。 ここでは実際のlocationディレクトリとマッチするURLのパターンを見ていきたいと思います。 Contents …

no image

journald

CentOS7では従来のsyslogデーモンと並行してjournaldというログ管理サービスがあります。 Contents1 コマンド一覧2 参考図書・リンク コマンド一覧 [crayon-675aa …

no image

zabbixについて 

現在、携わっているプロジェクトでサーバー監視をする必要性がでてきたので、監視ツールについていろいろ調べとります。 Contents1 サーバー監視とは2 サーバー監視ツールとは3 おおまかなイメージ4 …

no image

SSLに関して(主にオレオレSSLの作成方法など)

Contents1 HTTPSとは1.1 概要説明1.2 SSL費用の違いについて2 オレオレSSL2.1 秘密鍵作成コマンド2.2 公開鍵作成コマンド2.3 オレオレSSL証明書の作成3 webサー …

no image

ロードバランサーについて

ロードバランサーについてのメモなどを。 Contents1 ALBとELBの違いなど2 ELBの用語2.1 リスナー2.2 リスナールール2.3 アクション2.4 ターゲットグループ2.5 ターゲット …

アーカイブ