WordPress on Herokuでパーマリンクをカスタマイズする方法(あるいはnginxのrewriteルール設定方法)

WordPress on Heroku (nginx) でカスタムパーマリンクを設定する方法を説明する

WordPress on Herokuなら無料でWordPressブログを開設できる

紆余曲折を経て、ブログをWordPressに戻した。
ホスティングはHerokuを利用して無料で運営する魂胆だ。

インストールやデプロイはWordPressの日本語版をHerokuに設置する方法を参考にすると問題無く完了したが、過去の記事へのリンクをNot Foundにしないようにパーマリンク構造を引き継ごうとすると上手くいかなかった。

問題点はカスタムパーマリンクを設定すると記事ページが見られない

記事のリンクURLが
/?p=111といったパラメータ形式であれば問題無くHerokuでもWordPressが動いたのだが、
/category/year/monthnum/day/postnameなどのカスタムパーマリンクを設定するとトップページ以外が404 Not Foundになってしまった。

nginxのrewriteルールは.htaccessでは変更できない?

WordPress on HerokuのGitHubで指定されているように.htaccessを修正しても状況は変わらず。

.htaccess

# BEGIN WordPress

<ifmodule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</ifmodule>

# END WordPress

そもそも.htaccessのrewriteルールが効いてないのでは?と思い、HTTPサーバのnginxの設定ファイルを確認してみることに。

conf/nginx.conf.erbにそのものズバリのコメントが書いてあった

冒頭のWordPress on Herokuでは、Herokuのbuildpackとしてiphoting/heroku-buildpack-php-tylerを利用しているが、ここで読み込まれているnginx用の設定ファイルは自分のgitリポジトリに適切にコピーして書き換えると上書きできる。

方法は、自分のgitリポジトリに
confディレクトリを作り、そこに設定ファイル (
nginx.conf.erb) を置く。

設定ファイルのオリジナルを取得してディレクトリに置く

% mkdir conf
% cd conf
% wget https://raw.github.com/iphoting/heroku-buildpack-php-tyler/master/conf/nginx.conf.erb

nginx.conf.erbでコメントアウトされている部分を有効化

rewriteルールが書かれている部分を探し、コメントアウトされている箇所を以下のように直して保存。Herokuへデプロイしたら404 Not Foundは解消されてちゃんと見られるようになった。

    location / {
      # wordpress fancy rewrites
      if (-f $request_filename) {
        break;
      }
      if (-d $request_filename) {
        break;
      }

      rewrite         ^(.+)$ /index.php?q=$1 last;

      # Add trailing slash to */wp-admin requests.
      rewrite         /wp-admin$ $scheme://$host$uri/ permanent;

    #  # redirect to feedburner.
    #  # if ($http_user_agent !~ FeedBurner) {
    #  #   rewrite ^/feed/?$ http://feeds.feedburner.com/feedburner-feed-id last;
    #  # }
    }

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

次のHTML タグと属性が使えます: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>