先日書いた記事のURLが、一部大文字のアルファベットになっていたので小文字に変更したら、当然のごとくリンク切れになってしまった。

以前、.htaccessを使って301リダイレクトをしようと試みたことがあったが、.htaccessのファイルをdeployすることは出来たものの効果は無かった。
GitHub Pagesでは.htaccessを使えないらしい。

meta refreshタグなら使えるのではないかと思い、やってみた。

全ての記事の基本レイアウトで転送設定する訳にはいかないので、publicフォルダ内に転送元となるindex.htmlを作り、転送タグを記載。
generateの際に消えてしまわないよう所有者をrootに変更し、さらにパーミッションも444に変更した。
だが、この状態でgenerateするとエラーになってしまう。

なにか良い方法は無いかと検索したら、転送元となるindex.htmlを自動生成してくれるプラグインが見つかった。
hexo-generator-alias

Hexoの作業フォルダ内で端末を開き

$ npm install hexo-generator-alias --save

とコマンドを打つとインストール完了。
node_modulesフォルダにhexo-generator-aliasが追加される。

転送先の記事ソースのFrontMatterにalias: (転送元のパス)を追加しgenerateすると、publicフォルダ内に転送元となるindex.htmlを生成してくれる。

自分の例では、転送先の2015-02-06-lxpup-lxqtpup.mdのFrontMatterにalias: 2015/02/06/lxpup-LxQtPup/index.htmlを追記。(alias: /2015/02/06/lxpup-LxQtPup/あるいはalias: 2015/02/06/lxpup-LxQtPup/でも良いよう)
generateすると、public/2015/02/06/lxpup-LxQtPup/index.htmlが生成された。
ファイルの中身は転送指定のみの簡潔なもの。

<!DOCTYPE html><html><head><meta charset="utf-8"><title>Redirecting...</title><link rel="canonical" href="/2015/02/06/lxpup-lxqtpup/index.html"><meta http-equiv="refresh" content="0; url=/2015/02/06/lxpup-lxqtpup/index.html"></head></html>

旧URL http://pagent.github.io/2015/02/06/lxpup-LxQtPup/ にアクセスすると、ちゃんと新URLに転送された。

Jekyllにも同様のプラグインがあり、Octopressでも使えるようだ。
Blogging on Jekyll: URL Redirects - Raw Syntax

GitHub Pagesでの転送は以前は諦めていたが、これで一安心。

ーー
(追記)
過去の記事から転送指定しているものを探すには、source/_posts内で端末を開き下記コマンド

grep "alias:" *.md

すべての.mdファイルから「alias:」を含むファイルを抽出。

表示   このエントリーをはてなブックマークに追加

Comments

2015年2月17日