2010/6/11追記:
未保存の記事プレビュー/検索にも対応した、完全版をアップしました。
http://webbingstudio.com/weblog/cms/entry-136.html
上図のようなディレクトリ構造で、「information」と「blog」だけWordPressで更新できるようにしたい
…という案件が来ると、普通はinformationとblog、それぞれを起点にしたWordPressを個別に設置します。
WordPressは、バージョン2.9の段階では、ブログのルートより下層に静的ファイルを置いても表示されないからです。
ですが、
できればひとつのブログで、informationとblogをカテゴリーとして管理できるようにしたい
と言われた場合、この方法は使えません。
WordPressの全機能を使うのでなければ、一部ディレクトリだけ管理下に置くことは、プラグインの追加と.htaccessの調整で可能です。
WordPressを下層ディレクトリに置く
最上層のindex.htmlとぶつかってしまうので、WordPress本体はひとつ下層に設置します。
この例では「wordpress」というディレクトリに設置したとして話を進めます。
※私はセキュリティ上の理由などで、ディレクトリ名=CMS名にしないことが多いです
「WP No Category Base」を追加する
このカスタマイズをするには、プラグイン「WP No Category Base」が必要です。
これはWordPressで出力されるカテゴリーアーカイブのURLから、最初に必ず付与される「category」を取り除きます。
若干負荷が上がりますが、CMS的な構築をするには必須のプラグインです。
WordPress公式のプラグインディレクトリで入手できます。
http://wordpress.org/extend/plugins/wp-no-category-base/
特に設定は必要なく、アップロードして有効にするだけでOKです。
一般設定/パーマリンク設定を変更する
次に、WordPressの「設定→一般」と「設定→パーマリンク設定」を変更します。
一般設定
「ブログのアドレス」を「サイトルート」に設定します。
最初の図の「www」のURLが「http://webbingstudio.com/」だった場合はそれを入力して更新します。
このとき、サイトルートに.htaccessが書き出されます。
自作の.htaccessを置いていると上書きされてしまうので、前もって避難させるか、書き込み禁止にしてください。
パーマリンク設定
「カスタム構造」にチェックを入れて、以下のように記入します。
/%category%/%post_id%/
ブログのURLが「http://webbingstudio.com/」だった場合、カテゴリーがhoge、IDが6の記事のURLは
http://webbingstudio.com/hoge/6/
となります。
ここまで作業したら、サイトルートに書き出されている.htaccessを削除してしまいます。
新たに定義した.httaccessを置く
以下のように記述した、.htaccessをサイトルートに新しく設置します。
(既にある場合は追記します)
# BEGIN WordPress
RewriteEngine On
RewriteBase /
RewriteRule ^(information|blog)/(.*) wordpress/index.php [L]
RewriteRule ^(date|tag|feed)/(.*) wordpress/index.php [L]
RewriteRule ^category/(information|blog)/(.*) wordpress/index.php [L]
RewriteRule ^(information|blog)/feed/(.*) wordpress/index.php [L]
# END WordPress
RewriteBase
「/」はサーバールートからの相対パスです。
もしもサイトルートが「test」だと「/test/」となります。
RewriteRule
条件を満たした場合に、WordPressのindex.phpを呼び出す、という指定です。
(information|blog)に、WordPressを有効にしたいディレクトリをパイプ区切りで指示します。
「aaa」「bbb」「ccc」なら(aaa|bbb|ccc)と書きます。
「aaa/ddd」「bbb/eee/fff」などの下層ディレクトリもWordPress配下となります。
これをサイトルートにアップロードすると、
- 指定したカテゴリーと関連フィード
- 日別アーカイブ
- タグサーチ
のみWordPressが起動し、それ以外は静的コンテンツがあるサーバーと同じ挙動になります。
(例えカテゴリーを作っていても表示されません)
アップロードしたら、.htaccessのパーミッションを444にしてください。
書き込み可になっていると、WordPressの設定を変更したときに上書きされてしまいます。
あとは、各ページに移動して一部だけWordPressが起動するか確認します。
注意点
- 一般的なサーバーで動作確認をしていますが、設置条件やサーバー状況によってはうまくいかないかもしれません。必ず検証してください。
- WordPressの404ページは有効になりません。必要な場合は.htaccessにエラーページ指定を追記して自作してください。
- キーワード検索はURLのルールが違う(クエリ式)なので、別のRewriteRuleが必要です。まだ実装したことがないので、ここでは割愛します。