YAMANEKO's Laboratory - UNIXサーバー構築 - Apache関係
【Apache】ホスト名でディレクトリを切り替える(バーチャルホスティング)

手軽に、ホスト名でドキュメントのディレクトリを切り替える方法・・あえてここで説明するほどでもない、基本ですね。

httpd.confの一番下あたりにある設定を書き換えるだけでOK。

httpd.conf
NameVirtualHost *
<VirtualHost *>
    ServerName www.MyDomain.com
    DocumentRoot /usr/local/apache/htdocs
</VirtualHost>
<VirtualHost *>
    ServerName i.MyDomain.com
    DocumentRoot /usr/local/apache/htdocs/i
</VirtualHost>
【Apache】CGIを隠す

あんまり意味を見いだせなかったりするのですけど、一見、cgiっぽくないように見せてしまう方法です。
利点は、URLを短くできることと、内部の仕掛け・・CGIが動いてることを隠せること、くらい。.cgiとつかないので、先読みソフトとかロボットとかに敬遠されることもなくなります。

たとえば、
http://www.hogehoge.com/catalog/1/2/3
この、後ろの/1/2/3の部分をCGIにパラメータとして渡す方法。
confの中に以下のような記述を追加します。

httpd.conf または .htaccess
RewriteEngine  on
RewriteRule    ^/catalog/?(.*)  /cgi-bin/search.cgi?query=$1

これで、
http://www.hogehoge.com/catalog/1/2/3
は、
http://www.hogehoge.com/cgi-bin/search.cgi?query=1/2/3
として実行されます。

※mod_rewriteモジュールが必須です
※mod_rewrite関係の設定は、バーチャルホストを利用している場合などで、挿入すべき場所がいろいろ変わるので注意してください。

【Apache】直リンク禁止

トップページ以外にブックマークやリンクできた場合、トップページにとばしてしまう方法です。
ただし、REFERER情報を送ってこない環境(Norton Internet Securityをインストールしたまま使っている場合など)では、トップページしか見れなくなってしまいます。REFERERってプライバシーなのかなぁ、と、ちょっと疑問・・。

httpd.conf または .htaccess
RewriteEngine  on
RewriteCond    %{HTTP_REFERER}   !^http://www.hogehoge.com
RewriteCond    %{REQUEST_URI}    !^/$
RewriteRule    .                 http://www.hogehoge.com/   [R]

※mod_rewriteモジュールが必須です
※mod_rewrite関係の設定は、バーチャルホストを利用している場合などで、挿入すべき場所がいろいろ変わるので注意してください。

【Apache1.3.xx】リクエストのログをとる mod_prelog

普通のアクセスログは、HTTPのリクエストをApacheが処理し終わった時点で書き込まれます。が、mod_rewriteのデバッグ中など場合によってはそれでは手遅れで、リクエストを受け付けた直後のログがほしいこともあります。しかし残念ながら、Apacheにはそういう機能がないので、自分でモジュールを作ってみました。

>>

 

Apache1.3.xx用mod_prelog【mod_prelog.c】

ソースを適当なディレクトリにおいて、

/usr/local/apache/bin/apxs -c mod_prelog.c -o /usr/local/apache/libexec/mod_prelog.so

これでインストール完了。上記各パスは、インストール環境に合わせて変えてください。あとは、モジュールの読み込みと、ログの出力先を設定ファイル(httpd.conf)に書き込みます。他のLoadModuleがすでに設定ファイルの中に存在する場合は、一番先頭に入れると効果的です。

必要に迫られてやっつけで作ったので、あまり手の込んだ作りはしていません。ログのフォーマットをカスタマイズしたりもできませんし、おそらくパフォーマンスが少し落ちるので、あくまでデバッグ用に使ってください。

httpd.conf
LoadModule prelog_module libexec/mod_prelog.so
Prelog /var/log/httpd/pre_access_log
ディレクティブ Prelog
Syntax
Prelog ファイル名
Context server config
リクエストのログの出力先を指定します。出力先のファイルはすでに存在し、Apacheの実行ユーザで書き込みが可能でなければなりません。