Create  Edit  Diff  FrontPage  Index  Search  Changes  RSS  Login

htmlでアクセスしたい

 

tDiaryはすべてのページを動的に生成します。静的HTMLを出力する運用はサポートしていません。しかし、見かけ上と言うことならできる手段がいくつかあります。

mod_rewriteを使う方法

mod_rewriteによるURL書き換えを行うわけです。anchorプラグインを修正して使います。 tDiaryのindex.rbを置いたディレクトリの.htaccessを編集する場合、以下のようにします。

RewriteEngine on
RewriteRule ^([0-9\-]+)\.html$ index.rb?date=$1

または、httpd.confを以下のようにします(/diary/が日記のディレクトリとする)。

RewriteEngine on
RewriteRule ^/diary/([0-9\-]+)\.html$ /home/httpd/html/diary/index.rb?date=$1

日記のディレクトリが /~hoge/diary/ の形式の場合は ~hoge がエイリアス展開されて しまい、うまくいきませんので以下のようにします。

RewriteEngine on
RewriteBase /~hoge
RewriteRule ^diary/([0-9\-]+)\.html$ diary/index.rb?date=$1

※ver 2.1.1 以降では「前後の n 日分」機能が加わったので、上のルールの '([0-9]+)\.html' のところを '([0-9\-]+)\.html' に修正してあります。旧バージョンでも影響はありません。

これで「YYYYMMDD.html」でアクセスできるようになるのだが、 日記に埋め込まれた段落アンカーがまだ「?date=YYYYMMDD」を指しています。 これを変更できるようにするのがプラグイン集にあるhtml_anchorプラグイン。 このプラグインを有効にするだけでアンカーが変わります。

以下のような内容なので、特殊なrewrite設定にした場合は、 自分で新しいルールを生成するプラグインを書いて置き換えればよい。

def anchor( s )
  if /^([\d\-]+)#?([pct]\d*)?$/ =~ s then
     if $2 then
        "#$1.html##$2"
     else
        "#$1.html"
     end
  else
     ""
  end
end

.htaccess の Action を使う方法

ErrorDocument??を利用する場合と異なり、エラーログに無駄なログが表示されない利点があります。欠点は yyyymmdd.html 形式の静的な HTML ファイルを表示できなくなることです(通常の使用では問題になりません)。

方法は、.htaccessに以下の記述を追加するだけです。

<Files ~ "^([0-9]{4}|[0-9]{6}|[0-9]{8}|[0-9]{8}-[0-9]+).html$">
  Action text/html your_URL_of_index.rb
</Files>

「your_URL_of_index.rb」の部分をあなたの日記のURLに書き換えます。あとはプラグイン集にあるhtml_anchor.rbをpluginディレクトリにコピーすれば、YYYYMMDD.html形式でのアクセスができるはずです。

ErrorDocumentを使う方法

本来存在しないYYYYMMDD.htmlというページににアクセスすると、ErrorDocumentで設定したページが表示されるというApacheの設定を使うことで、実現できます。ただし、error_logに毎回エラーが記録されるという副作用があるので、あまりお勧めしません。上のmod_rewriteやActionを使えない場合にのみトライしてみてください。

やり方は以下の通りです。.htaccessに以下の3行を追加します。

<Files ~ "^([0-9]{4}|[0-9]{6}|[0-9]{8}|[0-9]{8}-[0-9]+).html$">
  ErrorDocument 404 your_URL_of_index.rb
</Files>

「your_URL_of_index.rb」の部分をあなたの日記のURLに書き換えます。あとはプラグイン集にあるhtml_anchor.rbを有効にすれば、YYYYMMDD.html形式でのアクセスができるはずです。

squeeze.rb で吐いてやる方法

この方法は上の三つの方法と根本的に異なります。squeeze.rbを使って、静的なhtmlファイルを作成する方法となります。が、この手法はあまり確立されていません。主にsqueeze.rbが吐き出すHTMLファイルは情報がいくつか欠落しているためです。

Last modified:2006/05/09 23:27:46
Keyword(s):
References:[FAQ] [html_anchor.rb]