Octopress でカテゴリやタグに日本語を使用すると、URL に日本語が含まれることになり、404 エラーでうまく表示できません。(ローカル環境(WEBrick or thin)で rake preview した時のこと。サーバ(Apache)では正常に表示できます)

OP_404ERROR_1

しかし、設定を編集することで、問題は解決できます。

以下、作業記録です。

0. 前提条件

  • 作業 OS は Linux Mint 13 Maya (64bit)
  • Ruby 1.9.3-p194
  • Octopress 2.0

1. config.ru の編集

config.rb を以下のように編集する。(URI.unescape させるだけということ)

File: config.ru

 1 diff --git a/config.ru b/config.ru
 2 index b1b746b..ab2150e 100644
 3 --- a/config.ru
 4 +++ b/config.ru
 5 @@ -1,5 +1,7 @@
 6 +# coding: utf-8
 7  require 'bundler/setup'
 8  require 'sinatra/base'
 9 +require 'uri'
10  
11  # The project root directory
12  $root = ::File.dirname(__FILE__)
13 @@ -7,7 +9,8 @@ $root = ::File.dirname(__FILE__)
14  class SinatraStaticServer < Sinatra::Base  
15  
16    get(/.+/) do
17 -    send_sinatra_file(request.path) {404}
18 +    #send_sinatra_file(request.path) {404}
19 +    send_sinatra_file(URI.unescape(request.path)) {404}
20    end
21  
22    not_found do
23 @@ -22,4 +25,4 @@ class SinatraStaticServer < Sinatra::Base
24  
25  end

2. 確認

確認してみる。

1
2
$ rake generate
$ rake preview

日本語のカテゴリ名、タグ名をクリックしても 404 エラーにはならないはず。

OP_404ERROR_2

3. その他

前述のようにクリックで 404 エラーにはならないものの、 The W3C Markup Validation Service で警告(エラーではない)となるかもしれない。
気にしないのなら、それでよいが、当方は気にする気質なので、対応しておきました。
詳細は記載しませんが、リンクを作っている部分に URL エンコードさせる処理を追加するだけです。

参考サイト


これで、ローカル環境でも日本語 URL で苦慮しなくてもよくなりました。

もしかしたら、日本語の記事タイトルもいけるかも知れませんが、未確認です。
(今のところ、記事タイトルについては rake new_post をカスタマイズしてまでやる意味を感じないから)

以上。