WordPressを一部のディレクトリのみ有効にする

2010/6/11追記:
未保存の記事プレビュー/検索にも対応した、完全版をアップしました。
https://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が「https://webbingstudio.com/」だった場合はそれを入力して更新します。
このとき、サイトルートに.htaccessが書き出されます。
自作の.htaccessを置いていると上書きされてしまうので、前もって避難させるか、書き込み禁止にしてください。

パーマリンク設定

「カスタム構造」にチェックを入れて、以下のように記入します。

/%category%/%post_id%/

ブログのURLが「https://webbingstudio.com/」だった場合、カテゴリーがhoge、IDが6の記事のURLは
https://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が起動するか確認します。

注意点

  1. 一般的なサーバーで動作確認をしていますが、設置条件やサーバー状況によってはうまくいかないかもしれません。必ず検証してください。
  2. WordPressの404ページは有効になりません。必要な場合は.htaccessにエラーページ指定を追記して自作してください。
  3. キーワード検索はURLのルールが違う(クエリ式)なので、別のRewriteRuleが必要です。まだ実装したことがないので、ここでは割愛します。

この記事をシェアする

この記事を書いた人

フロントエンドエンジニア

うぇびん

愛知県豊橋市の、荒ぶるフリーランスおばさんエンジニア。主な業務はCMSの構築、ウェブ制作全般。a-blog cms・WordPress・MTなど。マイクラ歴12年。得意な魔法はバイオだけど、そろそろ魔人さんにクラスチェンジしてフレアを撃ちたい。
個人のTwitter: @webbingstudio