« au WiMAX/CDMA端末発売、TryWiM... Main rsyncでリモートバックアップ »

PukiWikiでの添付ファイル名の表示対応

久しぶりにPukiWikiを取ってきたら、バージョンが以前の1.4.7のままでどうもメンテナンス的なものも2008年頃から更新されてないみたい。開発は止まっているのかな。(思い起こせば、PukiWikiを初めて導入した頃がPHPにも初めて触れたときで、微妙にPerlと違う点に戸惑っていた覚えが)。

それはともかく、PukiWikiの添付ファイルを開くリンクは「index.php?plugin=attach&pcmd=open&file=ファイル名&refer=ページ名」のようになっていて、内容は「Content-Disposition: inline; filename=ファイル名」のヘッダの後で送られてくる。pdfファイルとかだと、ブラウザ上に表示はされるのだが、inline の場合には filename= の属性は特に使用されない(無視される?)ようで、Firefox だとブラウザのタイトルはデータ生成元の「index.php」となってしまって、他の添付データの表示と区別がタイトルだけでは無理で、ブックマークなどでも利用しにくい。

ファイル名をタイトルバーに表示するには、指定URLの末尾が表示したいファイル名自身になっていればいいようなので、これをApache の mod_rewrite を使えばなんとかなるかも、ということでやってみた。指定URLの形式は「/(PukiWikiルート)/file/ページ名/ファイル名」として、これから情報を取り出してパラメータを指定することにする。

まずは、.htaccess でのURL書き換え設定

RewriteEngine On
RewriteBase /(PukiWikiルート)
RewriteRule file/([^/]+)/([^/]+)/([^/]+)$  index.php?plugin=attach&pcmd=open&file=$3&refer=$1&age=$2 [L]
RewriteRule file/([^/]+)/([^/]+)$  index.php?plugin=attach&pcmd=open&file=$2&refer=$1 [L]

2つある RewriteRule のうち、ひとつめは閲覧する添付ファイルにバージョン (age) 指定がある場合の対応(ファイル名の前に指定バージョンを含めている)。

次に plugin/attach.inc.php。こちらで添付ファイルの AttachFile クラスを toString で文字列に変換するときに希望のファイル名が後ろに来ている URL となるようにする。

--- attach.inc.php.org  Sat Apr 15 08:51:12 2006
+++ attach.inc.php      Wed Jul 14 16:58:21 2010
@@ -501,6 +501,8 @@
                $this->getstatus();
                $param  = '&file=' . rawurlencode($this->file) . '&refer=' . rawurlencode($this->page) .
                        ($this->age ? '&age=' . $this->age : '');
+               $param_rewrite = rawurlencode($this->page) . ($this->age ? '/' . $this->age : '') .
+                        '/' . rawurlencode($this->file);
                $title = $this->time_str . ' ' . $this->size_str;
                $label = ($showicon ? PLUGIN_ATTACH_FILE_ICON : '') . htmlspecialchars($this->file);
                if ($this->age) {
@@ -513,7 +515,8 @@
                        $count = ($showicon && ! empty($this->status['count'][$this->age])) ?
                                sprintf($_attach_messages['msg_count'], $this->status['count'][$this->age]) : '';
                }
-               return "<a href="$script?plugin=attach&amp;pcmd=open$param" title="$title">$label</a>$count$info";
+               //return "<a href="$script?plugin=attach&amp;pcmd=open$param" title="$title">$label</a>$count$info";
+               return "<a href="file/$param_rewrite" title="$title">$label</a>$count$info";
        }

        // 情報表示

$param_rewrite というのを新設して、これを使用するようにした。

まだ、あまり詳しく試していないが、これで添付ファイルの inline 表示時にファイル名をブラウザタイトルに表示できるようにはなっている。

なお、attach.inc.php プラグインには、他にも指定できるパラメータとして pass, page などがあるが、いまのところはこれらは無視している。

[追記]
改めて探してみると、PukiWikiのページにSEO対策ということで、静的ページに見せかける設定がいくつか紹介されている。
添付ファイルも静的リンクで表示されるものもあるようなので、素直にそちらを使った方がいいかも。

Leave a comment

Your comment