PukiWiki の URL を自由に設定可能にするパッチ

目次

概要

PukiWiki の URL を自由に設定できるようにするプラグイン&パッチです。 rewritemap.inc.php プラグインは、次のような機能を提供します。

  • ? のない静的なページ風の URL でアクセスできるようにします
    (URL の末尾が .html になるように設定することも可能です)
    (ページ名)PukiWiki/plugin
    通常の URLhttp://…/index.php?PukiWiki%2Fplugin
    URL の設定例1http://…/PukiWiki/plugin
    URL の設定例2http://…/PukiWiki/plugin.html
  • :config/RewriteMap ページに変換ルールを書くことで、ページ名とは独立に URL を設定できます
    (ページ名が日本語でも、アルファベットの URL にすることができます)
    (ページ名)PukiWiki/改造
    設定前の URLhttp://…/PukiWiki/%B2%FE%C2%A4
    設定後の URLhttp://…/PukiWiki/hack
  • :config/Redirect ページに変換ルールを書くことで、ページ間のリダイレクトを一括管理できます
    (ページを名前変更して URL が変わった場合に、旧 URL → 新 URL へリダイレクトさせたりするのに便利です)

さらに PukiWiki 本体にパッチを適用することで、 PukiWiki の生成するリンクも、この形式の URL にすることができます。

サンプル

当サイトの PukiWiki には、このパッチを適用してあります。 例えば、このページは「PukiWiki/パッチ/rewritemap」というページ名で作ってありますが、 URL は http://wiki.revulo.com/pukiwiki/patch/rewritemap となっています。

動作環境

以下のパージョンの PukiWiki に対応しています。

  • PukiWiki 1.4.7 以降
  • PukiWiki Plus! i18n 版 rev.1726 以降

また、Web サーバの mod_rewrite の機能を使える環境であることが必要です。 レンタルサーバの設定などにもよりますが、

  • Apache
  • lighttpd

このような Web サーバであれば、使える可能性は高いです。

インストール

プラグインのインストール

アーカイブファイルをダウンロードし、 PukiWiki をインストールしてあるディレクトリで展開します。

$ unzip rewritemap-3.0.zip

設定ファイルの雛型が欲しい場合は、それもダウンロードして展開して下さい。 展開する際には、上書き禁止の k オプションとパーミッション保持の p オプションを付けて下さい。

$ tar xvfzkp rewritemap_template-20070505.tar.gz

パッチの適用

PukiWiki 本体にパッチをあてます *1。 PukiWiki の場合は、get_page_uri, rewritemap の2つのパッチを順番にあてて下さい。

$ unzip pukiwiki_rewritemap-20100617.zip
$ patch --binary -Np1 < pukiwiki-1.4.7_get_page_uri.diff
$ patch --binary -Np1 < pukiwiki-1.4.7_rewritemap.diff

PukiWiki Plus! の場合は、get_page_uri のパッチは不要です。 rewritemap のパッチだけをあてて下さい。

$ patch --binary -Np1 < plus-i18n-rev1726_rewritemap.diff

必要に応じて、その他のプラグインにもパッチをあてて下さい。

$ unzip plugin_rewritemap-20100523.zip
$ patch -p0 < ajaxtree-1.3_rewritemap.diff
$ ......

URL の設定

.htaccess ファイルの RewriteBase の設定をして下さい。 例えば、http://example.com/wiki/ という URL が PukiWiki のトップページなら、 次のように書き換えて下さい。

RewriteBase /wiki

ただし、このように RewriteBase の設定をしても動かない場合もあるようです。 動かない場合は、掲示板の以下の書き込みを参考にしてみて下さい。

また、必須ではありませんが、pukiwiki.ini.php で以下の設定もすると良いでしょう。
(ただし $absolute_uri は PukiWiki Plus! 用の設定で、PukiWiki では効果はありません。)

$script_directory_index = 'index.php';
$absolute_uri = 0;

デフォルトの設定では、例えば PukiWiki というページの URL は http://example.com/PukiWiki のようになります。これを http://example.com/PukiWiki.html のようにしたい場合は、rewritemap.inc.php プラグインの設定を次のように変更して下さい。

define('PLUGIN_REWRITEMAP_SUFFIX', '.html');

PukiWiki Plus! と同様に、 PukiWiki でも ROOT_URI, SKIN_URI, IMAGE_URI という定数を用いるように修正しています。 これらの定数は自動で設定されますが、 もし変更したい場合は、index.php や pukiwiki.ini.php の該当箇所を手動で書き換えて下さい。

設定

プラグインの設定

rewritemap.inc.php の先頭部分で以下の値を設定することで、動作をカスタマイズできます。

PLUGIN_REWRITEMAP_SUFFIX
URL の最後の部分の文字列
PLUGIN_REWRITEMAP_ALIAS_CONFIG
URL とページ名との対応を記述するページ名
PLUGIN_REWRITEMAP_REDIRECT_CONFIG
リダイレクトのルールを記述するページ名
PLUGIN_REWRITEMAP_ALIAS_REGEX
URL とページ名との変換ルールの記述フォーマット (正規表現)
PLUGIN_REWRITEMAP_REDIRECT_REGEX
リダイレクトのルールの記述フォーマット (正規表現)

URL 用エイリアスの設定

:config/RewriteMap ページに表形式でルールを書くことで、 各ページに URL 用の別名を設定することができます。 例えば、PukiWiki/自作プラグイン というページの URL を PukiWiki/plugin.html にするには、 次のように記述します。

|PukiWiki/plugin    |PukiWiki/自作プラグイン|

リダイレクトの設定

:config/Redirect ページに表形式でルールを書くことで、 リダイレクト用の仮想的なページ名を設定することができます。 例えば PukiWiki/旧ページ → PukiWiki/新ページ のようにページを名前変更した場合、

|PukiWiki/旧ページ  |PukiWiki/新ページ|

のように記述することによって、 旧 URL へのアクセスを自動的に新 URL へリダイレクトさせることができます。 このリダイレクトは 301 のステータスコードを返しているので、 Google などの検索エンジンにも URL が変わったことが伝わります。

 

リダイレクトに関する注意事項をいくつか書いておきます。

  • 外部のページへのリダイレクトはできません。PukiWiki のページ内でのリダイレクトにのみ対応しています。
  • リダイレクト元のページが存在する場合はリダイレクトしません。(存在しないページ) → (存在するページ) というルールだけが有効です。
  • リダイレクトの回数は1回限りに制限しています。A → B, B → C のようなルールは、A → C, B → C のように書き換えて下さい。

ダウンロード

  • rewritemap-20101111.zip
    • rewritemap.inc.php プラグイン (table_edit.inc.php プラグインに暫定対応したもの)

更新履歴

rewritemap.inc.php プラグイン

  • Version 3.0 (2010/05/23)
    • 末尾に / や .html の付かない URL にすることを可能に
    • 相対 URL に一部対応 (PukiWiki Plus! は完全対応。PukiWiki は ?cmd=... 形式の URL が未対応)
    • 定数名を PLUGIN_REWRITEMAP_POSTFIX → PLUGIN_REWRITEMAP_SUFFIX に変更
    • 不要な flock(), ignore_user_abort() を削除
       
  • Version 2.0 (2007/05/05)
    • UTF-8 版 PukiWiki に正式対応
    • 日本語のページ名をうまく扱えないことがあった不具合を修正
    • リダイレクト機能を追加
       
  • Version 1.2 (2006/11/11)
    • 変換ルールをキャッシュするようにして高速化
       
  • Version 1.1 (2006/10/27)
    • 存在しないページを指定した場合は 404 のステータスコードを返すように修正
       
  • Version 1.0 (2006/04/23)
    • 初公開

PukiWiki 用パッチ

  • Version 20100617
    • PukiWiki Plus! 用のパッチが不十分だったのを修正
       
  • Version 20100523
    • 対応バージョンを PukiWiki 1.4.7 以降、PukiWiki Plus! i18n 版 rev.1726 以降に変更
    • ページの URL を取得するのに get_page_uri() 関数を用いるように変更
    • PukiWiki の全ての標準プラグインに対応
    • 定数 ROOT_URI が自動で設定されるように改良
       
  • Version 20080127
    • PukiWiki Plus! の newpage_subdir プラグインが動かなくなっていたのを修正
       
  • Version 20071216
    • PukiWiki Plus! i18n 版 rev.1494 用のパッチを追加
       
  • Version 20070602
    • edit.inc.php プラグインにもパッチをあてるように修正
       
  • Version 20070505
    • PukiWiki 1.4.7 (UTF-8 版) 用のパッチを追加
       
  • Version 20060626
    • PukiWiki 1.4.7 用のパッチを追加
       
  • Version 20060423
    • PukiWiki 1.4.6 用のパッチを公開

関連ページ


*1 Windows で patch コマンドを使う場合、改行コード CR+LF のファイルを扱うには --binary オプションが必要なようです。
*2 ただし、RewriteBase などの設定は自分でやって下さい。