<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>片っ端からメモってみる &#187; Apache</title>
	<atom:link href="http://www.parlia.net/weblog/post/category/linux/apache/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.parlia.net/weblog</link>
	<description>Linuxサーバ構築やその他もろもろの備忘録</description>
	<lastBuildDate>Mon, 20 Jul 2009 03:54:19 +0000</lastBuildDate>
	<language>ja</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0.1</generator>
		<item>
		<title>suEXECのドキュメントルートを変更する</title>
		<link>http://www.parlia.net/weblog/post/729.html/</link>
		<comments>http://www.parlia.net/weblog/post/729.html/#comments</comments>
		<pubDate>Mon, 20 Jul 2009 02:23:21 +0000</pubDate>
		<dc:creator>alte</dc:creator>
				<category><![CDATA[Apache]]></category>

		<guid isPermaLink="false">http://www.parlia.net/weblog/?p=729</guid>
		<description><![CDATA[Ubuntu8.04のApacheは、/var/www 以下でないとsuEXECが動かない。

# /usr/lib/apache2/suexec -V
 -D AP_DOC_ROOT="/var/www"
 -D AP [...]]]></description>
			<content:encoded><![CDATA[<p>Ubuntu8.04のApacheは、/var/www 以下でないとsuEXECが動かない。</p>
<pre>
# /usr/lib/apache2/suexec -V
 -D AP_DOC_ROOT="/var/www"
 -D AP_GID_MIN=100
 -D AP_HTTPD_USER="www-data"
 -D AP_LOG_EXEC="/var/log/apache2/suexec.log"
 -D AP_SAFE_PATH="/usr/local/bin:/usr/bin:/bin"
 -D AP_UID_MIN=100
 -D AP_USERDIR_SUFFIX="public_html"
</pre>
<p><span id="more-729"></span><br />
apache2-suexec-customパッケージがあれば、ドキュメントルートを簡単に変更できるが、Ubuntu8.04にはないので以下の方法を試す。</p>
<ul>
<li><a href="#hd1">apache2.2-commonのビルド</a></li>
<li><a href="#hd2">「--bind」オプションをつけてmount</a></li>
<li><a href="#hd3">バイナリエディタでsuexecを修正</a></li>
</ul>
<h2 id="hd1">apache2.2-commonのビルド</h2>
<p>suexecはapache2.2-commonパッケージに含まれている。</p>
<pre>
# dpkg -S /usr/lib/apache2/suexec
apache2.2-common: /usr/lib/apache2/suexec
</pre>
<p>ビルドの準備。</p>
<pre>
$ sudo apt-get build-dep apache2.2-common
$ apt-get source apache2.2-common
$ cd apache2-2.2.8/
</pre>
<p>fakerootがないと、ビルドでエラーが出るのでインストールする。</p>
<pre>$ sudo apt-get install fakeroot</pre>
<p>suexec-docrootを変更する。ここでは/homeとした。</p>
<pre>
$ vi debian/rules

              --with-suexec-docroot=<span style="color: #00ffff">/home</span> \
</pre>
<p>ビルドする。</p>
<pre>$ dpkg-buildpackage</pre>
<p>できたパッケージをインストールする。今回はファイルだけコピーすることにする。</p>
<pre>$ sudo cp debian/apache2.2-common/usr/lib/apache2/suexec /usr/lib/apache2/</pre>
<p>確認</p>
<pre>
# /usr/lib/apache2/suexec -V
 -D AP_DOC_ROOT="/home"
 -D AP_GID_MIN=100
 -D AP_HTTPD_USER="www-data"
 -D AP_LOG_EXEC="/var/log/apache2/suexec.log"
 -D AP_SAFE_PATH="/usr/local/bin:/usr/bin:/bin"
 -D AP_UID_MIN=100
 -D AP_USERDIR_SUFFIX="public_html"
</pre>
<p>バージョンアップ時に更新されないようにaptでholdする。</p>
<pre># echo apache2.2-common hold | dpkg --set-selections</pre>
<h2 id="hd2">「--bind」オプションをつけてmount</h2>
<p>「--bind 」オプションをつけて/homeを/var/www/homeにマウントする。</p>
<pre>
# mkdir /var/www/home
# mount --bind /home /var/www/home
</pre>
<p>apacheのDocumentRootを変更する。</p>
<pre>
# vi /etc/apache2/sites-available/default

&lt;Directory /var/www/home/user/public_html&gt;

    DocumentRoot /var/www/home/user/public_html
</pre>
<p>再起動時にmountされるようにfstabに記入する。</p>
<pre>
# vi /etc/fstab

/home /var/www/home         none    bind            0       0
</pre>
<h2 id="hd3">バイナリエディタでsuexecを修正</h2>
<p>バイナリエディタでsuexecのバイナリの値を変更する。</p>
<p>suexecをコピーする。</p>
<pre>
# cd /usr/lib/apache2/
# cp -p suexec suexec.test
</pre>
<p>バイナリエディタで「/var/www」を「/home...(nullを3つ)」に修正。<a href="http://www.parlia.net/weblog/post/728.html/">vimのバイナリモード</a>を使った。</p>
<pre>
# vi -b suexec.test
</pre>
<p>修正前</p>
<pre>
00019a0: 69 64 20 75 69 64 3a 20 28 25 6c 64 29 0a 00 2d  id uid: (%ld)..-
00019b0: 56 00 77 77 77 2d 64 61 74 61 00 2f <span style="color: #00ffff">76 61 72 2f</span>  V.www-data./var/
00019c0: <span style="color: #00ffff">77 77 77</span> 00 20 2d 44 20 41 50 5f 44 4f 43 5f 52  www. -D AP_DOC_R
00019d0: 4f 4f 54 3d 22 25 73 22 0a 00 20 2d 44 20 41 50  OOT="%s".. -D AP
</pre>
<p>修正後</p>
<pre>
00019a0: 69 64 20 75 69 64 3a 20 28 25 6c 64 29 0a 00 2d  id uid: (%ld)..-
00019b0: 56 00 77 77 77 2d 64 61 74 61 00 2f <span style="color: #00ffff">68 6f 6d 65</span>  V.www-data./home
00019c0: <span style="color: #00ffff">00 00 00</span> 00 20 2d 44 20 41 50 5f 44 4f 43 5f 52  .... -D AP_DOC_R
00019d0: 4f 4f 54 3d 22 25 73 22 0a 00 20 2d 44 20 41 50  OOT="%s".. -D AP
</pre>
<p>確認する。</p>
<pre>
# ./suexec.test -V
 -D AP_DOC_ROOT="/home"
 -D AP_GID_MIN=100
 -D AP_HTTPD_USER="www-data"
 -D AP_LOG_EXEC="/var/log/apache2/suexec.log"
 -D AP_SAFE_PATH="/usr/local/bin:/usr/bin:/bin"
 -D AP_UID_MIN=100
 -D AP_USERDIR_SUFFIX="public_html"
</pre>
<p>修正したsuexecと入れ替える。</p>
<pre>
# mv suexec suexec.orig
# mv suexec.test suexec
</pre>
]]></content:encoded>
			<wfw:commentRss>http://www.parlia.net/weblog/post/729.html/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>ApacheでPAM認証をする</title>
		<link>http://www.parlia.net/weblog/post/434.html/</link>
		<comments>http://www.parlia.net/weblog/post/434.html/#comments</comments>
		<pubDate>Thu, 20 Nov 2008 15:02:35 +0000</pubDate>
		<dc:creator>alte</dc:creator>
				<category><![CDATA[Apache]]></category>

		<guid isPermaLink="false">http://www.parlia.net/weblog/?p=434</guid>
		<description><![CDATA[PAMを使って、UNIXパスワードをApacheの認証に使うための設定。以下のものが必要。

Mod_Authnz_External - ユーザ名とパスワードを他のプログラムに渡して認証するためのモジュール
pwauth [...]]]></description>
			<content:encoded><![CDATA[<p>PAMを使って、UNIXパスワードをApacheの認証に使うための設定。以下のものが必要。</p>
<ul>
<li><a href="http://www.unixpapa.com/mod_auth_external/">Mod_Authnz_External</a> - ユーザ名とパスワードを他のプログラムに渡して認証するためのモジュール</li>
<li><a href="http://www.unixpapa.com/pwauth/">pwauth</a> - ユーザ名とパスワードを受け取ってPAM認証をする</li>
</ul>
<p><span id="more-434"></span></p>
<h2>Mod_Authnz_Externalのインストール</h2>
<p>パッケージがあったので、aptでインストールする。</p>
<pre># apt-get install libapache2-mod-authnz-external</pre>
<p>モジュールを有効にする。</p>
<pre># a2enmod authnz_external</pre>
<h2>pwauthのインストール</h2>
<p>ビルドするのに libpam0g-dev が必要。</p>
<pre># apt-get install libpam0g-dev</pre>
<p><a href="http://www.unixpapa.com/pwauth/">http://www.unixpapa.com/pwauth/</a> からダウンロードして展開。</p>
<pre>$ wget http://www.unixpapa.com/software/pwauth-2.3.6.tar.gz
$ tar zxvf pwauth-2.3.6.tar.gz
$ cd pwauth-2.3.6/</pre>
<p>config.hの修正。</p>
<pre>$ vi config.h</pre>
<p>コメントアウトしてSHADOW_SUNを無効にする。</p>
<pre>/* #define SHADOW_SUN       /* Linux, Solaris, IRIX */</pre>
<p>PAMを有効にする。</p>
<pre>#define PAM          /* Linux PAM or OpenPAM*/</pre>
<p>SERVER_UIDSをApacheが動作するユーザのuidにする。</p>
<pre>#define SERVER_UIDS 33</pre>
<p>認証可能とする最小のuidの指定。(どのユーザで認証するかによって変更する必要あり)</p>
<pre>#define MIN_UNIX_UID 5000</pre>
<p>Makefileの修正。</p>
<pre>$ vi Makefile

# Settings for author's system (Redhat 6.1)
CC=gcc
#LIB= -lcrypt           <span style="color: #00ffff;">&lt;- コメントアウト</span>
LOCALFLAGS= -g

# For PAM on Redhat Linux
LIB=-lpam -ldl 　       <span style="color: #00ffff;">&lt;- 有効にする</span></pre>
<p>ビルドしてpwauthをコピーする。</p>
<pre>
$ make
$ sudo mkdir /usr/local/libexec
$ sudo cp pwauth /usr/local/libexec/
$ sudo chmod u+s /usr/local/libexec/pwauth
</pre>
<h2>Apacheの設定</h2>
<p>Mod_Authnz_Externalで外部プログラムとしてpwauthを使うように、httpd.confに追加する。</p>
<pre>
AddExternalAuth pwauth /usr/local/libexec/pwauth
SetExternalAuthMethod pwauth pipe
</pre>
<p>認証をするディレクトリで.htaccessで設定する。<br />
全ユーザを認証の対象にする場合。</p>
<pre>
$ vi .htaccess

AuthType Basic
AuthName "authentication"
AuthBasicProvider external
AuthExternal pwauth
require valid-user
</pre>
<p>認証できるユーザをusername1とusername2だけにする場合は最後の1行を変更する。</p>
<pre>
require user username1 username2
</pre>
]]></content:encoded>
			<wfw:commentRss>http://www.parlia.net/weblog/post/434.html/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>AWStatsでApacheのログ解析</title>
		<link>http://www.parlia.net/weblog/post/428.html/</link>
		<comments>http://www.parlia.net/weblog/post/428.html/#comments</comments>
		<pubDate>Tue, 18 Nov 2008 15:11:20 +0000</pubDate>
		<dc:creator>alte</dc:creator>
				<category><![CDATA[Apache]]></category>

		<guid isPermaLink="false">http://www.parlia.net/weblog/?p=428</guid>
		<description><![CDATA[「AWStatsをFreeBSDで動かす」で日本語化されているawstats68t_jpn.zipを使ってApacheのログを解析する。



AWStatsをインストールするディレクトリ
/usr/local/awst [...]]]></description>
			<content:encoded><![CDATA[<p>「<a href="http://www.fiberbit.net/user/hobbit-t/html/awstats.html">AWStatsをFreeBSDで動かす</a>」で日本語化されているawstats68t_jpn.zipを使ってApacheのログを解析する。</p>
<table border="0">
<tbody>
<tr>
<td>AWStatsをインストールするディレクトリ</td>
<td>/usr/local/awstats</td>
</tr>
<tr>
<td>解析結果を出力するディレクトリ</td>
<td>/var/www/awstats</td>
</tr>
</tbody>
</table>
<p><span id="more-428"></span></p>
<h2>インストール</h2>
<p>awstats68t_jpn.zipをダウンロードして展開する。</p>
<pre># cd /usr/local/
# wget http://hobbit.ddo.jp/html/awstats68t_jpn.zip
# unzip awstats68t_jpn.zip
# rm awstats68t_jpn.zip</pre>
<p>バージョンアップしやすいようにシンボリックリンクにする。</p>
<pre># ln -s AWStats68t_Jpn awstats</pre>
<p>解析結果を出力するディレクトリを作成して必要なファイルをコピーする。</p>
<pre># cd awstats
# mkdir /var/www/awstats
# cp -r wwwroot/{css,icon,js} /var/www/awstats/</pre>
<h3>awstats68t_jpnの修正</h3>
<p>awstats68t_jpnはWindowsで作られているので、少し修正する。<br />
awstats.plに実行権限をつける。</p>
<pre># cd wwwroot/cgi-bin/
# chmod u+x awstats.pl</pre>
<p>改行コードをLFにする。</p>
<pre># mv awstats.pl awstats.pl.orig
# tr -d '\r'  &lt; awstats.pl.orig &gt; awstats.pl</pre>
<p>Perlのパスとスタイルシートのパス(DirCssを変更したときに反映されなかった)を修正。</p>
<pre># diff -uw awstats.pl.orig awstats.pl
--- awstats.pl.orig     2008-11-14 14:32:30.000000000 +0900
+++ awstats.pl  2008-11-18 22:07:53.000000000 +0900
@@ -1,4 +1,3 @@
-#!c:/perl/bin/perl
 #!/usr/bin/perl
 #------------------------------------------------------------------------------
 # Free realtime web server logfile analyzer to show advanced web statistics.
@@ -1676,7 +1675,7 @@
        $DirIcons||='/icon';
        $DirJs||='/js';
        $DirCss||='/css';
-       $StyleSheet||='/awstatscss/awstats_bw.css';
+       $StyleSheet||=$DirCss.'/awstats_bw.css';
        if ($DNSLookup !~ /[0-2]/)                      { error("DNSLookup parameter is wrong in config/domain file. Value is '$DNSLookup' (should be 0,1 or 2)"); }
        if (! $SiteDomain)                              { error("SiteDomain parameter not defined in your config/domain file. You must edit it for using this version of AWStats."); }
        if ($AllowToUpdateStatsFromBrowser !~ /[0-1]/)  { $AllowToUpdateStatsFromBrowser=0; }</pre>
<p>awstats68t_jpnのutf8_decode.plでは <a href="http://search.cpan.org/~hio/Unicode-Japanese/lib/Unicode/Japanese.pm">Unicode::Japanese</a> が必要なのでCPANでインストールする。</p>
<pre># perl -MCPAN -e shell
cpan&gt; install Unicode::Japanese</pre>
<h2>設定</h2>
<p>awstats.model.confをコピーして設定する。</p>
<pre># cd /usr/local/awstats/wwwroot/cgi-bin
# cp awstats.model.conf awstats.parlia.net.conf
# vi awstats.parlia.net.conf

LogFile="/tmp/awstats_access.log"
SiteDomain="www.parlia.net"
HostAliases="REGEX[\.parlia\.net$]"
DirData="/var/cache/awstats"
DirIcons="./icon"
DirJs="./js"
DirCss="./css"
DetailedReportsOnNewWindows=0
Lang="jp"</pre>
<p>データベースファイルのディレクトリ(DirData)を作成。</p>
<pre># mkdir /var/cache/awstats</pre>
<h2>データベースファイルの更新</h2>
<p>今あるログをすべて連結して/tmp/access.logに書き込む。</p>
<pre># ls /var/log/apache2/access.log*
/var/log/apache2/access.log /var/log/apache2/access.log.2.gz
/var/log/apache2/access.log.1 /var/log/apache2/access.log.20.gz
/var/log/apache2/access.log.10.gz /var/log/apache2/access.log.21.gz
/var/log/apache2/access.log.11.gz /var/log/apache2/access.log.22.gz
/var/log/apache2/access.log.12.gz /var/log/apache2/access.log.3.gz
/var/log/apache2/access.log.13.gz /var/log/apache2/access.log.4.gz
/var/log/apache2/access.log.14.gz /var/log/apache2/access.log.5.gz
/var/log/apache2/access.log.15.gz /var/log/apache2/access.log.6.gz
/var/log/apache2/access.log.16.gz /var/log/apache2/access.log.7.gz
/var/log/apache2/access.log.17.gz /var/log/apache2/access.log.8.gz
/var/log/apache2/access.log.18.gz /var/log/apache2/access.log.9.gz
/var/log/apache2/access.log.19.gz
# echo -n &gt; /tmp/access.log
# for log in `ls -tr /var/log/apache2/access.log.*.gz`
&gt; do
&gt; gzip -d &lt; $log &gt;&gt; /tmp/access.log
&gt; done
# cat /var/log/apache2/access.log.1 &gt;&gt; /tmp/access.log</pre>
<p>utf8_decode.plでログの検索語をUTF-8にする。awstats68t_jpnのutf8_decode.plはawstats_host.plを参照するので、awstats_host.plにホスト名を書き込んでから実行する。</p>
<pre># cd /usr/local/awstats/tools/
# echo '$Myhost = "parlia\.net";' &gt; awstats_host.pl
# perl utf8_decode.pl &lt; /tmp/access.log &gt; /tmp/awstats_access.log</pre>
<p>データベースファイルの更新。</p>
<pre># /usr/local/awstats/wwwroot/cgi-bin/awstats.pl -config=parlia.net -update</pre>
<h2>解析結果の表示</h2>
<p>過去分も含めてすべてHTMLファイルを出力する。</p>
<p><a href="http://fedorasrv.com/awstats.shtml">http://fedorasrv.com/awstats.shtml</a> を参考にしてスクリプトを作成した。INIT=1 の場合、すべてのデータベースファイルからHTMLを作成する。</p>
<pre># vi awstats_buildhtml.sh

#!/bin/bash

INIT=1
SITE=$1
HTMLDIR=$2
APACHELOG=$3
AWSTATSDIR=/usr/local/awstats
DIRDATA=/var/cache/awstats
TEMPLOG=/tmp/awstats_access.log

reportbuild() {
  cd $AWSTATSDIR/tools
  perl awstats_buildstaticpages.pl -awstatsprog=$AWSTATSDIR/wwwroot/cgi-bin/awstats.pl \
  -config=$SITE -dir=$HTMLDIR -update -year=$YEAR -month=$MONTH -builddate=$YEAR$MONTH
}

if [ $INIT -gt 0 ]; then
  for log in `ls $DIRDATA/awstats*.$SITE.txt`
  do
    YEAR=`echo $log | sed -e 's/^.\+awstats[0-9]\{2\}\([0-9]\{4\}\)\..\+$/\1/'`
    MONTH=`echo $log | sed -e 's/^.\+awstats\([0-9]\{2\}\)[0-9]\{4\}\..\+$/\1/'`
    reportbuild
  done
else
  cd $AWSTATSDIR/tools
  echo "\$Myhost = \"$SITE\";" | sed 's/\./\\./g' &gt; awstats_host.pl
  perl utf8_decode.pl &lt; $APACHELOG.1 &gt; $TEMPLOG
  perl utf8_decode.pl &lt; $APACHELOG &gt;&gt; $TEMPLOG
  YEAR=`date --date '1 days ago' +%Y`
  MONTH=`date --date '1 days ago' +%m`
  reportbuild
fi</pre>
<p>実行権限をつけて実行。HTMLファイルを作成する。/var/www/awstatsにawstats.parlia.net.200811.htmlなどができる。</p>
<pre># chmod u+x awstats_buildhtml.sh
# ./awstats_buildhtml.sh parlia.net /var/www/awstats</pre>
<p>普段は、INIT=0 にして更新分だけHTMLファイルを作成するようにする。</p>
<pre># vi awstats_buildhtml.sh

INIT=0</pre>
<p>毎日実行するようにcronに登録。</p>
<pre># vi /etc/crontab

1 0 * * * root /root/awstats_buildhtml.sh parlia.net /var/www/awstats /var/log/apache2/access.log &gt; /dev/null</pre>
<h2><strong>[12/11 追記]</strong> GeoIPプラグインを使う</h2>
<p><a href="http://www.maxmind.com/app/ip-location">GeoIP</a>を使うとIPアドレスから国や都市などの地理情報を取得できる。ここでは<a href="http://www.maxmind.com/app/geolitecountry">GeoLite Country</a>を使って国名を表示できるようにする。<br />
libgeo-ip-perl(Geo::IPモジュール)とlibgeoip1(GeoIP.dat)のインストール。</p>
<pre>
# apt-get install libgeo-ip-perl libgeoip1
</pre>
<p>confファイルの編集。</p>
<pre>
# vi /usr/local/awstats/wwwroot/cgi-bin/awstats.parlia.net.conf

LoadPlugin="geoip GEOIP_STANDARD /usr/share/GeoIP/GeoIP.dat"
</pre>
<p>libgeoip1のGeoIP.datの精度が悪いので、<a href="http://www.maxmind.com/app/geolitecountry">GeoLite Country</a>からGeoIP.datをダウンロードして置き換える。</p>
<pre>
# wget http://geolite.maxmind.com/download/geoip/database/GeoLiteCountry/GeoIP.dat.gz
# gzip -d GeoIP.dat.gz
# mv GeoIP.dat /usr/share/GeoIP/GeoIP.dat
</pre>
]]></content:encoded>
			<wfw:commentRss>http://www.parlia.net/weblog/post/428.html/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>mod_layoutでHTMLの自動挿入をする</title>
		<link>http://www.parlia.net/weblog/post/61.html/</link>
		<comments>http://www.parlia.net/weblog/post/61.html/#comments</comments>
		<pubDate>Fri, 05 Sep 2008 14:11:17 +0000</pubDate>
		<dc:creator>alte</dc:creator>
				<category><![CDATA[Apache]]></category>

		<guid isPermaLink="false">http://www.parlia.net/weblog/?p=61</guid>
		<description><![CDATA[mod_layoutモジュールを使ってヘッダやフッタなどを自動的に挿入するための設定。

モジュールをインストール
Apache2なので、libapache2-mod-layoutをaptでインストール
# apt-ge [...]]]></description>
			<content:encoded><![CDATA[<p>mod_layoutモジュールを使ってヘッダやフッタなどを自動的に挿入するための設定。<br />
<span id="more-61"></span></p>
<h2>モジュールをインストール</h2>
<p>Apache2なので、libapache2-mod-layoutをaptでインストール</p>
<pre># apt-get install libapache2-mod-layout</pre>
<p>モジュールを有効にする。</p>
<pre># a2enmod layout</pre>
<h2>設定</h2>
<p>httpd.confか.htaccessに設定する。</p>
<p>mod_layoutを適用するファイルを指定する。下記の例では、*.htmlと*.htmに適用される。</p>
<pre>AddOutputFilter LAYOUT html htm</pre>
<p>LayoutHeaderで&lt;body&gt;直後、LayoutFooterで&lt;/body&gt;直前に挿入するファイルを指定する。ファイル名はDocumentRootからのパスを指定。</p>
<pre>LayoutHeader /include/header.html
LayoutFooter /include/footer.html</pre>
<p>除外するファイルの指定。</p>
<pre>LayoutIgnoreURI /ignore_dir/*</pre>
<p>特定の文字列を置換したり、追加することもできる。</p>
<pre>Layout "&lt;!-- replace --&gt;" /include/replace.html replace
Layout "&lt;!-- append --&gt;" /include/append.html append</pre>
<p> </p>
<ul>
<li>.htaccessの設定例</li>
</ul>
<table border="0" cellspacing="1">
<tbody>
<tr>
<td>DocumentRoot</td>
<td>/example_path/public_html</td>
</tr>
<tr>
<td>.htaccessのパス</td>
<td>/example_path/public_html/.htaccess</td>
</tr>
</tbody>
</table>
<p>この場合.htaccessに</p>
<pre>AddOutputFilter LAYOUT html htm
LayoutHeader /header.html</pre>
<p>のように書くと、 /example_path/public_html 以下のすべての*.htmlと*.htmの&lt;body&gt;の直後に /example_path/public_html/header.html の内容が挿入される。</p>
<p>相対パスの指定も可能。</p>
<pre>LayoutHeader ./header.html</pre>
<p>この場合、 /example_path/public_html/index.html にアクセスすると /example_path/public_html/header.html が挿入されるが、 /example_path/public_html/dir/index.html にアクセスすると /example_path/public_html/dir/header.html が挿入されるので設定には注意が必要。</p>
<h2>SSI（INCLUDES）との併用</h2>
<p>SSIとmod_layoutの両方を適用させたいときは.htaccessに下記のように記入する。</p>
<pre>AddOutputFilter INCLUDES;LAYOUT shtml
AddOutputFilter LAYOUT html htm</pre>
<p>こうすると、*.shtmlにはSSI（INCLUDES）とmod_layout（LAYOUT）が、*.htmlと*.htmにはmod_layoutだけが適用される。<br />
テストしてみたときはうまくいったが、SSIとmod_layoutは相性が悪いらしいので運用には注意が必要かも。</p>
]]></content:encoded>
			<wfw:commentRss>http://www.parlia.net/weblog/post/61.html/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
