#author("2023-10-03T00:21:29+09:00","default:admin","admin") * URLカスタマイズ機構を利用する [#w708d3ec] #author("2023-10-03T00:22:09+09:00","default:admin","admin") * PukiWikiの新機能「URLカスタマイズ機構」を導入 [#w708d3ec] &tag(PukiWiki,URLカスタマイズ機構); #bcontents PukiWiki 1.5.4の新機能であるURLカスタマイズ機構を導入してみる。 こちらを参考にして導入する。 #blink(https://pukiwiki.sourceforge.io/dev/?BugTrack/2525) 私は/?xxxxxxxxxxという形にしたかったので、上記ページの「(9)の短縮URLプラグイン (s.inc.php) による常時短縮URL パターン2」と「(8) 短縮URLプラグイン (s.inc.php) 短縮URL優先利用カスタマイズ」の両方を使う。 このURLカスタマイズ機構は他にもまるで静的サイトのように見せることができる、「(3) path風に変更する」というものもある。 1.5.4からURLカスタマイズ機構はPukiWiki標準機能となっているのだが、[[s.inc.php>https://pukiwiki.sourceforge.io/?自作プラグイン/s.inc.php]]という短縮プラグインを導入しなければならない。 #blink(https://pukiwiki.sourceforge.io/?自作プラグイン/s.inc.php) [[URL短縮プラグインのGitHubページ>https://github.com/umorigu/pukiwiki.urlshortener]]からsrc/を開いてs.inc.phpをダウンロードした。 ちなみに私はskin/pukiwiki.skin.php の変更はしていないので「skin/pukiwiki.skin.php を編集」は飛ばした。 ''shortener/''と''shortener_counter/''、2つのフォルダを作成してパーミッションを777にする。 設定値は以下のようにした。 define('PLUGIN_S_VIRTUAL_QUERY_PREFIX', '?'); define('PLUGIN_S_PAGENAME_MININUM_LENGTH', 1); PLUGIN_S_PAGENAME_MININUM_LENGTHを変更した理由はすべてのページを同じようなURLにしたかったからだ。 ''pukiwiki.ini.php''の以下の行を[[BugTrack/2525>https://pukiwiki.sourceforge.io/dev/?BugTrack/2525]]の(9)に従って置き換えた。 ///////////////////////////////////////////////// // Page-URI mapping handler ( See https://pukiwiki.sourceforge.io/?PukiWiki/PageURI ) だが、これだと(8)の優先利用カスタマイズは使えないので以下のように変更した。 (9) のカスタマイズにリダイレクトさせる機能も付け加えた。 #gcode(php){{ ///////////////////////////////////////////////// // Page-URI mapping handler ( See https://pukiwiki.sourceforge.io/?PukiWiki/PageURI ) class ShortUrl2PageURIHandler extends PukiWikiStandardPageURIHandler { function get_page_uri_virtual_query($page) { exist_plugin('s'); // Load s.inc.php $page_id = plugin_s_get_page_id($page); if ($page_id) { return '?' . $page_id; } return '?' . pagename_urlencode($page); } function get_page_from_query_string($query_string) { exist_plugin('s'); // Load s.inc.php $m = array(); if (preg_match('#^([0-9a-z]{10})$#', $query_string, $m)) { $page = plugin_s_get_page_from_page_id($m[1]); if ($page) { return $page; } else { // Not found http_response_code(404); die_message('Not found'); exit; } } $is_get = $_SERVER['REQUEST_METHOD'] === 'GET'; if ($is_get) { if (!preg_match('#^([0-9a-z]{10})$#', $query_string, $m) ) { $dec_page = urldecode($query_string); $page_id = plugin_s_get_page_id($dec_page); if ($page_id) { $short_url = get_page_uri($dec_page, PKWK_URI_ROOT); header("HTTP/1.1 302 Found"); header("Location: $short_url"); exit; } } } return parent::get_page_from_query_string($query_string); } } $page_uri_handler = new ShortUrl2PageURIHandler(); }} これで「/?xxxxxxxxxx」の短縮の形のURLとなり、エンコードされたページで開かれたURLは短縮の形へリダイレクトするようになった。 ** コメント [#o1e3d33e] #pctrlcmt
[もっと見る]
[もっと見る]