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

AWSのCLIに関して

実務でAWSを使ってたんですがテスト時にはコマンドを使っている方がはるかに早いためコマンドライン環境を作っておいたほうが良いです。 ちなみに使用する前にはAWSのコンソールからIAMユーザーを作成する …

no image

Git+SSH鍵認証

鍵認証をともなったgitのpushやpullについて。 中央リポジトリに公開鍵がおいてあり、リモートリポジトリに秘密鍵を配置します。 ステップとしては以下の2ステップになります。実行時ユーザーのディレ …

no image

phpenvで入れたphpの起動スクリプトに関して

以前、CentOS7.7にphp5.3を入れるという案件がありましたが、yumなどでは入らないため、phpenvで入れました。 phpenv5.3+php-fpm が、起動スクリプトを配置していないこ …

no image

CodeDeployに関して

近年のプロジェクトではアプリのデプロイに関して、サーバーに入ってgitコマンドを打つようなケースは減ってきており、何らかのデプロイツールを使ってやることが一般的。 Contents1 CIツールを使っ …

no image

dockerインストール

ansibleに続いてdockerについて書いていこうと思います。 Contents1 dockerとは?1.1 インストール1.2 イメージ取得&コンテナ作成1.3 commit1.4 参考リンク …

アーカイブ