XREA-ad

WEBLOG

2009/5/16 土曜日 16:01:49 [WEB]

WordPressのアーカイブを降順にしたい

ブログで最近の記事が新着順に表示されるのは分かるんですが、 「○年○月の記事一覧」みたいなアーカイブを見ようとした場合にも新着順で表示されると何か違和感があります。 やっぱり過去の記事は書かれた順に並んでいる方が見やすくないですか?

しかし、WordPressも例に違わず新着順で表示してくれて、どうやら逆順にする設定も存在しないように見える。 書かれた順に記事を読みたいと思うのは俺くらいなのかなあと思いつつ、それでもテンプレートに手を加えてみました。

続きを読む
2008/11/16 日曜日 17:59:52 [WEB]

mod_rewriteでのクエリの扱い

mod_rewriteでクエリ(URIの?マーク以降の部分)を参照するにはRewriteCond%{QUERY_STRING}を調べればよい。 rNote時代のクエリ付きのリクエストをリダイレクトさせようと思い、たとえば

http://reva.s28.xrea.com/?d=2008-11-16

へのアクセスを

http://reva.s28.xrea.com/archives/date/2008/11/16/

へ書き換えるべく、.htaccessに次のような記述を加えました。

RewriteEngine on
RewriteCond %{QUERY_STRING} d=([0-9]+)-([0-9]+)-([0-9]+)
RewriteRule . /archives/date/%1/%2/%3/ [R=301,L]

しかし実際にURIが正しく変換されるか試してみると、リクエストがループしていると怒られました。 どうやら書き換え後のURIにもクエリが付加されているようで、 いつまでたってもRewriteCondを満たしてしまっていたようです。 つまり、

http://reva.s28.xrea.com/?d=2008-11-16
http://reva.s28.xrea.com/archives/date/2008/11/16/?d=2008-11-16
http://reva.s28.xrea.com/archives/date/2008/11/16/?d=2008-11-16
http://reva.s28.xrea.com/archives/date/2008/11/16/?d=2008-11-16
.
.
.

という風なリダイレクトが繰り返されていたと考えられます。 その後試行錯誤したところ、どうも書き換えURIに?が入っているとクエリの引継ぎは行われないことが分かり、

RewriteEngine on
RewriteCond %{QUERY_STRING} d=([0-9]+)-([0-9]+)-([0-9]+)
RewriteRule . /archives/date/%1/%2/%3/? [R=301,L]

と試しに書いてみたところ、期待通りに動いてしまいました。マジか。 しかも変換後のURIに?がくっついてhttp://reva.s28.xrea.com/archives/date/2008/11/16/? のようになることもありませんでした。これは如何に。

もう少し調べてみると、だいたい次のような感じで挙動していることが分かりました。

  • 書き換えURIに?が入っていなければ、元のURIのクエリを引き継ぐ
  • 書き換えURIに?が入っていれば、元のURIのクエリを破棄する
  • 書き換えURIに?が入っていて[QSA]オプションがついていれば、書き換えURIに元のクエリを合成する

これらから察するに、元のURIだけでなく書き換えURIも内部で一度クエリだけを切り離されて処理された後、付け直しているのかも。 末尾に?だけ付けても実際に返されるURIにゴミが付かなかったのは、元のURIのクエリが書き換えURIの空のクエリで上書きされた後、変換後のURIを出力する際にクエリは空だから?以降は付ける必要なしと判断されているものと考えられるんじゃないでしょうか。

それにしてもクエリ破棄のために末尾に?を付けるって発想はなかった。 mod_rewrite、というか.htaccessはまだまだ分からんことが多いなあ。

2008/9/3 水曜日 14:01:00 [WEB]

Famicompo mini vol.5

Famicompo mini vol.5が始まりました。 これはファミコン音源で作った曲のコンペティションです。 ピコピコした音が好きな方は是非聴きに行きましょう!

ちなみに、曲はすべてNSFというファミコン音楽のフォーマットで投稿されています。 NSFの再生にはシンプルで軽い"VirtuaNSF"や、Winampの再生プラグインとして動作する"NSFplug"がおすすめです。

VirtuaNES official site
VirtuaNSFを配布しているサイト。
入手は "Download" > "Other program / data" から。
DIGITAL SOUND ANTIQUES
NSFplugを配布しているサイト。
2007/12/23 日曜日 22:56:00 [WEB]

圧縮転送をtext/htmlに限定する

.htaccessを使って簡単に圧縮転送の対象を限定できました。

SetEnv gzip-only-text/html 1

上のように記述するとmod_deflateの方でこの変数を参照してくれて、 html以外のファイルは圧縮されなくなるようです。 Apacheは全然分からないのでこんな書き方になってますが、 もうちょっと格好いい書き方がありそうですね。

前に書いた夢の音楽館様から借りている file.nijinone.jp上に置いたzipファイルがgzipで更に圧縮される問題はこれで解決しました。

更に、ファイル転送時にファイルサイズ不明と表示される現象も起こらなくなりました。 これはあくまで推測ですが、圧縮後のサイズが一定値を超えるとバッファから溢れて、 Content-Lengthが確定する前にストリーム応答で転送が開始されてしまうんじゃないかと思います。 この推測が当たってるとすると、大体のレンタルサーバーではその挙動を見る限り、重いファイルは圧縮しない設定になってる? どうなんでしょう。

それにしてもダメもとで試した.htaccessが機能したのは驚きました。 というか大丈夫なのかこれは。 利用規約には特に何も書かれてないしサーバーの設定でも禁止されてないのはOKってこと...なのかな!

2007/12/2 日曜日 2:02:00 [WEB]

Firefoxでcheckloaduri.enabledの設定が反映されない

Firefoxではセキュリティのためネットワーク上のページからローカルにある画像ファイルなどを読み込めないようになっています。 どうしてもローカルファイルを呼び出す必要がある場合はuser.jsに次のような記述を加えます:

user_pref("capability.policy.policynames", "localfilelinks");
user_pref("capability.policy.localfilelinks.sites", "http://許可するサイト");
user_pref("capability.policy.localfilelinks.checkloaduri.enabled", "allAccess");
# 他の名前と被らなければ
# "localfilelinks"の代わりに好きな名前を使える

Fx1.5以降はこの書き方でOK...のはずなんだけど何故か上手くいかない!

小一時間格闘して見つけた原因は意外にもアドオンのNoScriptでした。 実はNoScriptには信頼済みサイトからのローカルファイルへのアクセスを許可するかどうかの設定があって、 こっちの設定がuser.jsの記述よりも優先されてしまうようです。 要するに、NoScriptを使ってる人はuser.jsは使わずにNoScriptの設定を変えるだけでOKってことらしい。

設定はNoScript オプション > "詳細設定"のタブ > "Trusted"のタブ > "Allow local links"のチェックボックスから変更できます。 これだとNoScriptで許可したサイトすべてからローカルファイルにアクセスできるようになるので少し怖いかも...でも仕方ないか。

この方法でOGameのスキンをローカルに置けました。 ちなみに、わざわざWeb上からローカルファイルを読み込ませたいのって大体スキンとか高速化とかの目的だと思うんですが、 Firefoxの場合、ローカルファイルのパスはfile://から始める必要があるのでご注意。 例えばc:\ogame\skin\を指定する場合はfile://c:/ogame/skin/みたいな感じで。