Apacheのmod_rewrite

Zend FrameworkでMVCを使うには、mod_rewriteを使って、全てのリクエストをフロントコントローラー に転送することになるんですが、ローカルでテストするときだけ、なぜかうまく行かなくて悩んでました。

RewriteEngine on
RewriteBase /apps/
RewriteRule !\.(js|ico|gif|jpg|png|css)$ index.php

dp.SyntaxHighlighter.ClipboardSwf = ‘/blog/syntaxhighlighter/clipboard.swf’;
dp.SyntaxHighlighter.HighlightAll(‘code’);

こんな感じでApacheに設定すると、/apps/loginにアクセスするとloginコントローラーのデフォルトアクションが呼ばれます。

テストサーバ上ではうまく動いているのと、/apps/index.php/loginとリクエストすれば同じ形になるので、ローカルでおかしいのは追求せずにいたんですね。

mod_rewriteはちゃんとロードされていたので、ちょっと現実逃避でmod_rewriteの使い方を調べてみたら、Options FollowSymLinksが必要らしいです。Apacheのエラーログにもちゃんと出てました(←全く見てない)。

「mod_rewrite Options FollowSymLinks」でググったら、一発で出てきました。

mod_rewriteを使うには「Options FollowSymLinks」が必要

いやあ、ちゃんとエラーログくらい見なきゃいけませんね。


LeopardでMacPorts(2)Apache2

前回に続いて、Apacheのインストール。

LeopardではApache2、PHPも5になってるので(Apacheが1.3.33から2.2.6、PHPが 4.4.7から5.2.4らしい)、そっちを使うという手もあるんですが、最初から入ってるものはそのまま残しておきたいし、自分の環境は自由に手を入れたくなるだろうということで、MacPortsで行くことにしました。

Apacheのインストール

すんなりとは行かなかったのですが、まずは正しい手順を書いておきます。

いつものインストール。

$ sudo port install apache2

バージョンを見てみます。

$ /opt/local/apache2/bin/httpd -v

Server version: Apache/2.2.6 (Unix)

Server built: Nov 11 2007 09:11:42

設定ファイルのコピーと文法チェック。

$ sudo cp /opt/local/apache2/conf/httpd.conf.sample /opt/local/apache2/conf/httpd.conf

$ /opt/local/apache2/bin/apachectl -t

手動での起動と停止。

$ sudo /opt/local/apache2/bin/apachectl start

$ sudo /opt/local/apache2/bin/apachectl stop

僕は、

alias apache2ctl=’sudo /opt/local/apache2/bin/apachectl’

を[ .bashrc]に登録してます。

自動起動用のファイルも作られているので、自動起動させたい場合はloadします(unloadでオフに)。

$ sudo launchctl load -w /Library/LaunchDaemons/org.macports.apache2.plist

困ったエラー

僕がMacPortsとApacheで遭遇したエラーは3種類。

1つ目は、前回も書いたんですが、TigerをLeopardにアップグレードしたら発生したulimitのエラー(参照)。

2つ目は、LeopardにMacPortsを入れてapache2をインストールしようとしたら、依存関係のあるdb44(Berkeley DB)のパッケージがインストールできませんでした。

同じエラーが出ていてvariantsにdarwin_8とuniversalを指定すればいいというブログを見つけたんですが、それでは解決せず。今年の9月くらいのことらしいし、原因は違うのかも。

MacPortsのBTSを見てみたところ、#12040とか#12405にありました。事象自体は未解決なんですが、#12040のほうのコメント欄にあるhintにある/usr/localをリネームしてインストールするという方法で、db44をインストールできました。

$ sudo mv /usr/local /usr/localx

$ sudo port install db44 +darwin_8

$ sudo mv /usr/localx /usr/local

Tiger時代のapache2インストール時に自動的にインストールされたdb44には、variantsにdarwin_8が指定されていたので、今回もそれを踏襲してみました(今回もapache2経由でdb44を入れればよかったんですが、db44をインストールすることに集中しちゃってました)。

続いて、3つ目。ようやくapache2をインストールできたと思ったら、デフォルトの設定ファイルでは起動できず。mod_ssl.soがロードできないためのようです(参照)。

ローカルでの動作にはSSLは不要なので、コメントアウトして解決(?)です。

ほかにも、9月の始めくらいには、MacPortsがインストールしようとしているaprのバージョンが古く、ファイルが取得できないということもありました。そのときは、数日待っていたら修正されたのですが、エラー原因がわかっているのに対処できなかったんですよね。

もう少しMacPortsの裏側の仕組みを把握すれば、エラーにも対処できるようになるでしょうか。

次回は、PHP5のインストールです。

Technorati Tags: ,


JIRAとConfluence

今年度になって、ようやくJIRAとConfluenceを会社で購入することができたので、時間を見つけてはセットアップしています。

試用時はStandalone版(Tomcat+HSQL DB)をダウンロードして、すぐに使っていたのだけど、本格運用するにあたってはWebサーバ+APサーバ+DBという構成にしようと思い、ちまちまやっています。

Webサーバとの連携とか、DBを設定するとか、JIRAのユーザデータをConfluenceから使うとか、それぞれ個別には試したことがあったので楽チンだと思っていたけど、「まとめて全部」というのは、やったことはなかったもので、それなりに苦労中です。

資料は、この辺り。

でも、トラブルに遭遇すると、理解が深まりますね。

Technorati-JP Tags: , ,

Apacheモジュールはじめました

最近作りたいもの」でも書いたのですが、Apacheのモジュールを作ってみたいなと思っています。

そんなわけで、ちょっと前に買っていた『Apacheモジュール プログラミングガイド』を参考にかんたんなモジュールを作ってみています。Apacheにはずっと触れていたのに、理解が浅かったなあと反省しつつ、勉強です。

ApacheのモジュールはC言語で書いたコードをコンパイルして作るのですが、C言語は他人が書いたコードを流し読みするくらいの経験しかなく、ちゃんとプログラミングするのは未経験。

書籍ではApache 1.3系について説明されていて、2.0系の話は最後の章で違いとして解説されています。最近、触ってるのは2.0系ばかりだなと思いつつ、個人的に使えるUNIXの環境を見てみると、いつも使っているWindowsのノートパソコン内のCooperative Linuxの中で動いているApacheが唯一1.3系。とりあえず、そこを勉強中の開発環境とすることにしました。

実際にインターネット上で動かしたくなったら、その時考えます。

それにしても、Apacheモジュールに触れた書籍は少ないんですよね。ほかにあるのは洋書の翻訳版。

前にPerlをガシガシ書いていた5年くらい前には、mod_perlの情報目当てに、この2冊を手にとった記憶があるのですが、当時は理解できる限界を超えていたようです。今なら、参考になるかも。

Technorati-JP Tags: