WordPress の Permalinks 使う場合、何箇所か詰まったのでまとめてみようかと。

必要な環境

  1. PC-UNIX サーバ
  2. Apache(Windows 版だと mod_rewrite が動かない)
  3. Apache モジュール mod_rewrite
  4. Apache の設定で .htaccess 有効

「4」に補足すると、有効になっていても AllowOverride が「none」だと使えない。このサーバでは「All」にしているので全て使える。AllowOverride ディレクティブの値次第で .htaccess で使用できる機能も決まるので、IfModule が使えない環境だと諦めるより他はない。

Permalinks とは

他のツールで言えば FancyURL という機能かと。

http://www.host.name/index.php?p=2

のような URI を

http://www.host.name/item/2/

のように変換する機能。SEO 的に良いという話があるが、真偽の程は定かではない。しかし、見栄えはよいので、私は使えるならこのようにしている。

ちなみにサーバ上には $DocumentRoot/item/2/ というディレクトリは存在しない。mod_rewrite モジュールが URI を書き換えているだけ。mod_rewrite は複雑なので勉強していないので詳しくないが、知っていればいろいろ出来て面白そう。

WordPress で利用するには

管理画面→ Options → permalinks と進み「Structure」というフォームに書き込めばよい。例も書いているが、このサーバでは

/items/%post_id%/

としている。使用方法は Using Permalinks に記されている。
更新ボタンを推すと .htaccess を作成してくれるのだが、初期状態では .htaccess はないのでファイルを作成してアップする。Windows だと dot で始まるファイルを作成するのが難しいので適当なファイル名で作成する。ファイルの中身は作成してくれた

<IfModule mod_rewrite.c>
RewriteEngine On

で始まる文字列をコピーして貼り付ける。

また、空のファイルを作成、アップロードして .htaccess にリネームしてパーミッションを書き込みできる状態にすれば、更新ボタンを押した際に自動で書き換えてくれる(suEXEC 環境なら 600 で、それ以外なら 606 でいいだろう。666 は危ないかと)。

注意点

上記で作成した .htaccess はそのまま使っていて問題ないのだが、自分の経験では書き換えなければならない時がいくつかあることがわかった。

  1. 新規に Page を投稿する場合
  2. Page の Page slug を指定しないで、Page Title にマルチバイトを含む場合
  3. Post 内に nextpage を使う場合

「1」の場合。Page を投稿すると、通常 Post とは扱いが異なるので、%page_id% には含まれない。Page slug でアクセスするからだ。例えばPage slug「test」という Page を投稿すると URI は

http://wp.luac.net/test/

となる。勿論そのディレクトリは実在しないので 404 を返される。mod_rewrite のルールに追加しなければならないので、管理画面から .htaccess を更新する。
Permalinks 機能を使っていない文には問題ない。

「2」の場合。slug というものを上手く訳せないし、説明もできないのだが、要は URI に関連する文字列だ。ここにマルチバイトが入っていると厄介なことになる。通常の URI は url encode してくれるので、ブラウザからのアクセスは問題ない。問題は Trackback URI だ。Page slug が「テスト」などとすると

http://wp.luac.net/テスト/trackback/

などとなり、url encode されていないので、Trackback を受け取れない状態になる。Page Title を「テスト」などとして、Page Slug を空にして投稿すると Page slug = Page Title になってしまうので、明示的に Page slug をアルファベットで構成されたものにする必要がある。
# とまれ、GsBlog では WordPress に Trackback 自体エラー出てしまうのだが。

「3」の場合。Structure を「/(slash)」で終わらせていればいいのだが、「/」で終わらせていない場合は nextpage が機能しない。

「/」が無い場合

http://wp.luac.net/items/23/

「/」がある場合

http://wp.luac.net/items/2/3/

というようにならないといけないからだ。「/」がない場合はその page_id が存在した場合、その記事にリンクが貼られてしまう。

間違いあったらご指摘ください。

No Writebacks »

No Writebacks yet.

Leave a comment


RSS feed for comments on this post.
Trackback URI : http://wp.luac.net/permalinks/trackback/