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のルールを知りたい場合は以前も紹介しましたが、下記のリンクが詳しいです。

https://murashun.jp/blog/20141229-01.html#chapter-199
http://oxynotes.com/?p=7392#5
http://ysklog.net/mod-rewrite/rewrite-base.html

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

mod_rewriteのウェブサービス

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

http://www.generateit.net/mod-rewrite/index.php
まずはサンプルのURLをいれて挙動を確認してみましょう。.htaccessを自動で吐いてくれます。

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

注意点

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

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

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

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

http://cms.aiosl.jp/manual/kowaza/1077/

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

 

 

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

執筆者:


comment

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

関連記事

no image

Swift_Mailer(PHPのメール送信。Laravelに入っているライブラリ)

Laravelでメールを送信することがあったんですが使っていたライブラリがSwift_Mailerだったので、ここにメモ。 Swift Mailerのインストール&メールを送信する 今回最初 …

no image

vimの基本的な使い方 設定ファイル、基本コマンド他

もう4年ぐらいの付き合いになる憎らしくもかわいいエディタvi(vim)について。 雑誌に特集があったのでこれを機にまとめてみました。シリーズものになるかも・・・ Contents1 Vi(vim)とは …

no image

webサーバーのログの見方

サーバー監視の基礎となるWebサーバーのログ(主にApache)の見方について少し書いてみようと思います。Apacheで解説しますが、nginxでもほぼおなじです。 Contents0.1 モジュール …

no image

Linuxでのパス

以前、composerを入れるときに、こちらの記事を書いたのですが、自分が使っているVPSではこの方法で入りませんでした。 調べるとみるとPATHが/usr/local/binではなく/usr/bin …

no image

vagrantで仮想環境を別PCにコピー

vagrantで自分の作った環境を他人にコピーしたい機会があり、なんとか成功したのでメモします。いや~便利ですね・・・ 環境は vagrant 1.7.4 win8 です。 Contents1 準備2 …