当ブログを、更新するとdlvr.itを使って、twitter,facebookに情報を更新通知をしているが、
通知後、色んな方に「404エラー」になるとご指摘をいただいていた。
hexo-で-404-File-not-found を参考に修正を行ったが、以下の状態だった。
- 直接URLにアクセスに行くと正常表示される。
- feed経由だと404エラー
※ NFDかどうかはfirefoxで確認ができる(chromeではダメだった)。以下、画像のように「で」の後ろにカーソルを合わせ、文字削除を実行してみると、
「”」が消え、「て」になる。
hexo-generator-feed
で生成されるfeedのxmlファイルについてもNFD(Normalization Form D)->NFC変換する必要があることがわかった。
そこで、 unorm を利用し、”生成されるNFDのパーマリンク全て”をNFCに変換することにした。
npmで
unorm
をインストールする。1
npm install unorm
hexo本体を以下のとおり改修
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18# diff -ur node_modules/hexo/lib/models/post.js_back node_modules/hexo/lib/models/post.js
--- node_modules/hexo/lib/models/post.js_back 2015-06-09 01:01:58.000000000 +0900
+++ node_modules/hexo/lib/models/post.js 2015-06-09 01:00:24.000000000 +0900
@@ -4,6 +4,7 @@
var moment = require('moment');
var pathFn = require('path');
var Promise = require('bluebird');
+var unorm = require('unorm');
var _ = require('lodash');
var Moment = require('./types/moment');
@@ -45,6 +46,7 @@
Post.virtual('path').get(function(){
var path = ctx.execFilterSync('post_permalink', this, {context: ctx});
+ path = unorm.nfc(path);
return typeof path === 'string' ? path : '';
});
URLもfeedのリンクも正常に表示されるようになった!