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形式でのアクセスができるはずです。
Keyword(s):
References:[FAQ] [html_anchor.rb]