1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

PukiWikiAdvent Calendar 2024

Day 14

PukiWiki 1.5.4の新機能「URLカスタマイズ」を使う

Posted at

はじめに

1.5.4からPukiWikiのURLをカスタマイズすることができるようになったみたいなので使ってみます。

今回は /?ページ名/ページ名 にしたいと思います。(なんかカッコイイですし)

URLカスタマイズ

URLカスタマイズはPukiWikiで「動的URLを静的URLに見せかける」、「URLを短くする」などといったことをします。

補足:?, &, = が含まれたURLを動的URLといい、それに対して含まれないURLを静的URLといいます。


PukiWiki 1.5.4から追加された機能で詳細は以下、PukiWiki公式サイトの「URLカスタマイズの仕組み」に記載されてます。

PukiWikiは本来「てすとぺーじ」というページ名にアクセスするとURLは https://.../?てすとぺーじ となります。
?からはパラメータで、開いているページは暗黙的に index.php となっており、パラメータから受け取ったページを表示する仕組みとなっているのです。

静的URLにするメリットはSEO対策となるようですが、最近のクローラーは動的URLだとしても問題ないようです。

稀に1.5.4より前からURLを独自にカスタマイズしているものがあります。
例えば日本のWIKI サービスであるWIKIWIKIは、PukiWiki Plus!ベースですが、これも動的URLを静的URLに見せかけているようです。

以前では本体を改造する必要があったのですが、1.5.4からは本体の改造なしにできるようになったので手軽にできるようになりました。

カスタマイズ例

公式サイトの上記ページに記載されていました。

カスタマイズ URL 種類
(1) デフォルト https://.../?てすとぺーじ 動的URL
(2) .html付き https://.../?てすとぺーじ.html 動的URL
(3) path風 https://.../てすとぺーじ 静的URL
(6) 短縮URLベース https://.../?&c1568344c7 動的URL
(7) 短縮URLリダイレクト https://.../?てすとぺーじ (短縮URLにアクセスしてもページ名URLへリダイレクト) 動的URL
(8) 短縮URL優先 https://.../?c1568344c7 (ページ名URLにアクセスしても短縮URLへリダイレクト) 動的URL
(9) 短縮URLベース2 https://.../?c1568344c7 動的URL

URLを変更する手順

今回やりたいことは以下の「(3) ページ名を path に見せる」です。

ページ名の前に '?' がつかず、ページがそのままサーバー上のファイルのように見えるURL

つまり、https://.../?ページ名https://.../ページ名 にします。

pukiwiki.ini.php の編集

(1) 92行目のIMAGE_DIRをルート相対パスで指定する

// Static image files
-define('IMAGE_DIR', 'image/');
+define('IMAGE_DIR', '/image/');

PukiWikiがhttps://example.com/の直下に入っているならば/image/
https://example.com/pukiwiki/ とpukiwikiディレクトリであれば/pukiwiki/image/を指定します。


(2) Page-URI mapping handlerに関する設定は547行目にあります。

class VirtualPathPageURIHandler extends PukiWikiStandardPageURIHandler {
    function get_page_uri_virtual_query($page) {
        return pagename_urlencode($page);
    }
}
pkwk_base_uri_type_stack_push(PKWK_URI_ROOT);
$page_uri_handler = new VirtualPathPageURIHandler();

を以下のように挿入します。

pukiwiki.ini.php
/////////////////////////////////////////////////
// Page-URI mapping handler ( See https://pukiwiki.osdn.jp/?PukiWiki/PageURI )
-$page_uri_handler = null; // default
// $page_uri_handler = new PukiWikiStandardPageURIHandler();

+class VirtualPathPageURIHandler extends PukiWikiStandardPageURIHandler {
+    function get_page_uri_virtual_query($page) {
+        return pagename_urlencode($page);
+    }
+}
+pkwk_base_uri_type_stack_push(PKWK_URI_ROOT);
+$page_uri_handler = new VirtualPathPageURIHandler();

.htaccess の編集

PukiWikiがルート直下であれば

.htaccess
RewriteEngine On
RewriteCond %{REQUEST_URI} !(^/$)
RewriteCond %{REQUEST_URI} !(^/image/)
RewriteCond %{REQUEST_URI} !(^/skin/)
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !(\.php$)

RewriteRule ^(.+)$ /?$1 [L]

を.htaccessに追記します。

例えば、https://example.com/pukiwiki/ ならば

.htaccess
RewriteEngine On
RewriteCond %{REQUEST_URI} !(^/pukiwiki/$)
RewriteCond %{REQUEST_URI} !(^/pukiwiki/image/)
RewriteCond %{REQUEST_URI} !(^/pukiwiki/skin/)
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !(\.php$)

RewriteRule ^(.+)$ /pukiwiki/?$1 [L]

公式サイトの詳細では

.htaccess
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d

は記載されていませんが、念の為上記も追記して実際に存在するファイルやディレクトリは例外にしておきます。

skin/pukiwiki.skin.php の編集

しかし、このままでは /aaa/bbb にアクセスした場合、CSSやJSが読み込まれないではありませんか...!

pukiwiki.skin.phpで skin/下のものが直接指定されている場合はすべて/skin/に変更します。
<?php echo SKIN_DIR ?>/<?php echo SKIN_DIR ?>にします。

もし、 https://example.com/pukiwiki/ にPukiWikiを設置しているのであれば、/skin/ ではなく /pukiwiki/skin/ にします。

PukiWiki標準スキンの場合は以下のように変更します。

(1) 75行目

pukiwiki.skin.php
- <link rel="stylesheet" type="text/css" href="<?php echo SKIN_DIR ?>pukiwiki.css" />
+ <link rel="stylesheet" type="text/css" href="/<?php echo SKIN_DIR ?>pukiwiki.css" />

(2) 77-78行目

pukiwiki.skin.php
- <script type="text/javascript" src="skin/main.js" defer></script>
- <script type="text/javascript" src="skin/search2.js" defer></script>
+ <script type="text/javascript" src="/skin/main.js" defer></script>
+ <script type="text/javascript" src="/skin/search2.js" defer></script>

別でスキンを突っ込んでる方は修正箇所が異なるので各自で対応してください。

  • SKIN_DIR -> '/' . SKIN_DIR
  • skin/ -> /skin/
  • image/ -> /image/

pukiwiki.ini.php のIMAGE_DIRを変更しているのであれば、IMAGE_DIRに関しては変更を加えなくてもいいはずです。

終わりに

手軽にできるようになったとはいえ、スキンの編集やらはしなければなりませんねえ...
ぶっちゃけ変更してみて、コレに関しては好みにもよりますが、私は動的URLのほうが好きですね。

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?