個人的なメモを記していくためのページです。
前にバージョンアップしたときにhtml_anchor.rbプラグインを入れ忘れていたために日記の各エントリが/20040715.htmlと/?date=20040715の二つ存在することになってしまった。動的に生成されるURLは後者なんだけどブックマークや検索エンジンのクローラは以前の.htmlも参照するので結果として同じ内容が別のURLで重複してしまった。
これをhtml_anchorを入れたことだし.html形式に統一させたい。そのために /?date=日付のリクエストに対してリダイレクト等で日付.htmlに誘導するmod_rewriteを考える。日付.htmlで参照されたときもmod_rewriteで内部的には/?date=nnnnnになっている。直接?date=が来たときだけ.htmlへリダイレクトさせたいのだが案の定無限ループ
mod_rewrite: maximum number of internal redirects reached. Assuming configuration error. Use 'RewriteOptions MaxRedirects' to increase the limit if neccessaryとか要求されたURLとまったく同じURLへリダイレクトしたりとこかうまくいかない。 結果こうしたらまぁまぁうまくいった。
-rw-r----- 1 admin web 2176 Jul 15 05:14 .htaccess -rw-r----- 1 admin web 19 Jan 24 16:13 .htpasswd -rw-r----- 1 admin web 625 Jan 24 16:08 dot.htaccess -rwxr-x--- 1 admin web 14665 Feb 1 08:44 grep.cgi -rwxr----- 1 admin web 108 Jan 24 16:08 index.cgi -rw-r----- 1 admin web 0 Jul 15 05:11 index.html -rwx--x--- 1 admin web 109 Mar 2 00:04 search.cgi -rwxr-x--- 1 admin web 105 Feb 14 11:08 tb.cgi -rw-rw---- 1 admin web 126 Jan 24 16:08 tdiary.conf -rwxr----- 1 admin web 109 Jan 24 16:08 update.cgi
RewriteRule ^([0-9]+)\.html$ index.cgi?date=$1 [L] RewriteCond %{QUERY_STRING} ^date\=([0-9]+)$ RewriteRule index.html %1.html? [L,G] RewriteCond %{QUERY_STRING} ^$ RewriteRule index.html index.cgi直接index.cgi?日付形式で指定されて場合まで無効に出来るわけではないが、その必要もないし。
0.0.0.0 - - [15/Jul/2004:06:07:11 +0900] "GET / HTTP/1.0" 200 1168 "-" "-"