blogのURLどうしようかなこれ

そういえば

WordPressの投稿データを抜き出して云々をやっていて気づいたのだが、URLそのままにオレオレblogシステムを作る場合にRouter周りはどうやって実装すればいいんだ?と。

WAFのRouter

通常、というか俺の知る限りだとbootstrapファイルにリクエストを集約させて、リクエストURIから分岐して云々がデフォだ。MVCではないWordPressでも同じ。例えばPHPのPhalconではnginxの設定に下記記述をする。

    # Represents the root of the domain
    # https://localhost:8000/[index.php]
    location / {
        # Matches URLS `$_GET['_url']`
        try_files $uri $uri/ /index.php?_url=$uri&$args;
    }

Phalcon Documentation - Web Server Setup

そのリクエストに対してFWのコアでゴニョゴニョやって、下記のようなURLパターンで処理を分岐させ実行している。

/<Contoroler>/<Function>/<Param>

ASP.netの場合、MVCテンプレートを作るとStartup.csには自動で下記のようなコードが生成される。

            app.UseEndpoints(endpoints => {
                endpoints.MapControllerRoute(
                    name: "default",
                    pattern: "{controller=Home}/{action=Index}/{id?}");
            });

Go(Gin)の場合は、この間作ったメールフォームのを引用するとこんなん。

const (
    IndexPath    = "/contact/"
    ConfirmPath  = IndexPath + "confirm"
    CompletePath = IndexPath + "complete"

    /* ----- 省略 ----- */

    // action
    engine.GET(IndexPath, index)
    engine.POST(ConfirmPath, confirm)
    engine.POST(CompletePath, complete)
    // 404
    engine.NoRoute(notFound)

で、

WordPressにはdefaultでcategoryなどがあるので、Frontend側はIndex, Categoryの2つのコントローラでいいよなーと何の疑問もなく考えていた。(コメントとか検索とかは全く不要なので)

自分のblogのパーマネントリンク設定なんて忘れていたのだ。

wp-permalink

前回のエントリ記事のURLは https://www.dobusarai.net/blog/omaera-mo-deskmawari-wo-miseroyo/ である。/blogというのは単にこのWebサーバ内のblogディレクトリの中にWordPressを突っ込んでいるからそうなっているだけで、WordPressから見ればURLは /omaera-mo-deskmawari-wo-miseroyo/ こうである。これはwp_posts.post_nameである。

`post_name` varchar(200) COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT '',

unique付いてないんだな、phpで存在チェックしてるんだな、とかはどうでもよい。普通のMVCフレームワークで作ると……通常は上のparamをIndexControllerで受けつけようとすると /index/omaera-mo-deskmawari-wo-miseroyo となる。PHPでナウな感じじゃないなら /?post_name=omaera-mo-deskmawari-wo-miseroyo とかでもいいけど。

そういうわけで潜る前に

や、こんなんどこかでURLを解析して分岐してるだけなのはわかっている(そして美しくないコードであることも)のだが、このpost_nameをキーにして個別ページを描画するというルールに則った場合、お行儀の良いMVCにするのは不可能だなと。URLパターン変えてnginx側でredirectさせてもいいのだが(そもそもこんな泡沫blogのURLなんてどうでもいいのだが)めんどくさい!コードたくさん書くよりミドルウェアの設定を変えるほうがよっぽど!

追記 2020-12-21

debuggerで追いかけてみた。/wp-includes/class-wp.php内で鬼のような数の正規表現パターン(commentがーsearchがー等々)を所有してループで回し、リクエストにhitするかどうかーみたいのをやってる。想像通り(実装はあ"ーって感じだが)なのでもう追いかけるの終わりにする。

[blog][markdown] うーんこの

markdown

慣れるまで、や、使い始めるまでは「なんかめんどくさいんじゃないのー?Web系のウェイウェイが騒いでるだけでさー?」ってイメージだったのだが、今ではメモするにも何するにしてもmarkdownで書いている。特に職場ではVScodeくらいしか自由に使える道具が無いので非常に有用だ。そうなってくるとこの当該クソブログもmarkdownで書きたくなるわけで。

続きを読む "[blog][markdown] うーんこの"