blog/2023-10-03 の変更点

PukiWikiの新機能「URLカスタマイズ機構」を導入


#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

検索

 

最新のページ

2023-11-22 2023-10-26 2023-10-08

[もっと見る]

タグ

[もっと見る]

人気のページ

カウンター

合計: 207
今日: 1
昨日: 0
オンライン: 2
  編集 差分 履歴 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS
This site is protected by Turnstile and the Cloudflare Privacy Policy and Terms of Service apply.