PukiWiki/パッチ/rewritemap の変更点


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

#contentsx


* 概要 [#y085a17c]

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

- ? のない静的なページ風の URL でアクセスできるようにします&br;
(URL の末尾が .html になるように設定することも可能です)
|LEFT:115		|LEFT:					|c
|~(ページ名)		|PukiWiki/plugin			|
|~通常の URL		|http://…/index.php?PukiWiki%2Fplugin	|
|~URL の設定例1	|http://…/PukiWiki/plugin		|
|~URL の設定例2	|http://…/PukiWiki/plugin.html		|

- :config/RewriteMap ページに変換ルールを書くことで、ページ名とは独立に URL を設定できます&br;
(ページ名が日本語でも、アルファベットの URL にすることができます)
|LEFT:115	|LEFT:					|c
|~(ページ名)	|PukiWiki/改造				|
|~設定前の URL	|http://…/PukiWiki/%B2%FE%C2%A4	|
|~設定後の URL	|http://…/PukiWiki/hack		|

- :config/Redirect ページに変換ルールを書くことで、ページ間のリダイレクトを一括管理できます&br;
(ページを名前変更して URL が変わった場合に、旧 URL → 新 URL へリダイレクトさせたりするのに便利です)

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


* サンプル [#hc0a1d9a]

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


* 動作環境 [#dd40a29c]

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

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

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

- Apache
- lighttpd

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


* インストール [#z336b533]

** プラグインのインストール [#m86ca8ba]

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

{{{
$ unzip rewritemap-3.0.zip
}}}

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

{{{
$ tar xvfzkp rewritemap_template-20070505.tar.gz
}}}


** パッチの適用 [#c58205fb]

PukiWiki 本体にパッチをあてます
((Windows で patch コマンドを使う場合、改行コード CR+LF のファイルを扱うには --binary オプションが必要なようです。))。
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 の設定 [#nb610917]

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

{{{
RewriteBase /wiki
}}}

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

- [[Re^7: さくらインターネットでrewritemapを使用する>http://www.revulo.com/bbs/wforum.cgi?no=742&reno=741&oya=735&mode=msgview]]

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

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

デフォルトの設定では、例えば PukiWiki というページの URL は
http&#58;//example.com/PukiWiki
のようになります。これを
http&#58;//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 の該当箇所を手動で書き換えて下さい。


* 設定 [#h107a146]

** プラグインの設定 [#t97e858f]

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 用エイリアスの設定 [#x37f4584]

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

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


** リダイレクトの設定 [#p21422c7]

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

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

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

#br

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

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


* ダウンロード [#za845215]

- [[pukiwiki-1.4.7_notb_utf8_rewritemap-20100523.tar.gz>http://download.revulo.com/PukiWiki/pukiwiki-1.4.7_notb_utf8_rewritemap-20100523.tar.gz]] (とりあえず試してみたい人向け)
-- PukiWiki 1.4.7 UTF-8 版に以下のパッチ、プラグインを導入したもの
((ただし、RewriteBase などの設定は自分でやって下さい。))

- [[rewritemap-3.0.zip>http://download.revulo.com/PukiWiki/rewritemap-3.0.zip]]
-- rewritemap.inc.php プラグイン

- [[rewritemap-20101111.zip>http://download.revulo.com/PukiWiki/rewritemap-20101111.zip]]
-- rewritemap.inc.php プラグイン (table_edit.inc.php プラグインに暫定対応したもの)

- [[rewritemap_template-20070505.tar.gz>http://download.revulo.com/PukiWiki/rewritemap_template-20070505.tar.gz]]
-- :config/RewriteMap ページの雛形
-- :config/Redirect ページの雛形

- [[pukiwiki_rewritemap-20100617.zip>http://download.revulo.com/PukiWiki/pukiwiki_rewritemap-20100617.zip]]
-- PukiWiki 1.4.7 (EUC-JP 版、UTF-8 版) 以降用パッチ
-- PukiWiki Plus! i18n 版 rev.1726 以降用パッチ

- [[plugin_rewritemap-20100523.zip>http://download.revulo.com/PukiWiki/plugin_rewritemap-20100523.zip]]
- [[plugin_rewritemap-20101111.zip>http://download.revulo.com/PukiWiki/plugin_rewritemap-20101111.zip]]
-- [[ajaxtree.inc.php プラグイン>http://www.revulo.com/PukiWiki/Plugin/AjaxTree.html]] (Ver.1.3~) 用パッチ
-- [[counterlist.inc.php プラグイン>http://www.revulo.com/PukiWiki/Plugin/CounterList.html]] (Ver.1.4) 用パッチ
-- [[pagetree.inc.php プラグイン>http://www.revulo.com/PukiWiki/Plugin/PageTree.html]] (Ver.2.1) 用パッチ
-- [[table_edit.inc.php プラグイン>http://pukiwiki.sourceforge.jp/?%E8%87%AA%E4%BD%9C%E3%83%97%E3%83%A9%E3%82%B0%E3%82%A4%E3%83%B3%2Ftable_edit.inc.php]] (Ver.1.18) 用パッチ
-- [[treeview.inc.php プラグイン>http://www.revulo.com/PukiWiki/Plugin/TreeView.html]] (Ver.1.3) 用パッチ


* 更新履歴 [#sb5f034a]

** rewritemap.inc.php プラグイン [#y3b3708b]

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


** PukiWiki 用パッチ [#a6df5091]

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


* 関連ページ [#l73ce318]

- [[PukiWiki/改造/静的コンテンツに偽装/ページ - cubic9.com>http://cubic9.com/PukiWiki/%B2%FE%C2%A4/%C0%C5%C5%AA%A5%B3%A5%F3%A5%C6%A5%F3%A5%C4%A4%CB%B5%B6%C1%F5/%A5%DA%A1%BC%A5%B8/]]
- [[PC備忘録/PukiWikiメモ/pgidプラグイン - 物置>http://m-arai.s41.xrea.com/closet/106.html]]
- [[Hack/read.inc.php - SONOTS Plugin>http://lsx.sourceforge.jp/?Hack%2Fread.inc.php]]
- [[Hack/PukiWiki Static! - SONOTS Plugin>http://lsx.sourceforge.jp/?Hack%2FPukiWiki%20Static%21]]
- [[Plugin/statichtml.inc.php - SONOTS Plugin>http://lsx.sourceforge.jp/?Plugin%2Fstatichtml.inc.php]]