先月書いた「 WordPressを一部のディレクトリのみ有効にする」カスタマイズの完全版です。
2010-10-13追記:「WordPressの中に静的ファイル置けますよ?」と言われ、やってみたら表示できました(号泣
確かに過去にいくつかのサーバーで表示できないのを確認しており、細かい条件があるようなのですがますます謎です。情報求む。
前回の記事では
- 未保存の記事のプレビュー
- ブログ内検索
ができませんでしたが、今回はそれも可能になっています。
ただし、サイトのホーム(index.html)にも細工が必要で、手順も複雑になります。
詳しくは追記以下で。
1: WordPressの設定
WordPressを下層ディレクトリに置く
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://example.com/」だった場合はそれを入力して更新します。
このとき、サイトルートに.htaccessが書き出されます。
自作の.htaccessを置いていると上書きされてしまうので、前もって避難させるか、書き込み禁止にしてください。
パーマリンク設定
「カスタム構造」にチェックを入れて、以下のように記入します。
/%category%/%post_id%/
ブログのURLが「http://example.com/」だった場合、カテゴリーがc1、IDが6の記事のURLは
http://example.com/c1/6/
となります。
ここまで作業したら、サイトルートに書き出されている.htaccessを削除してしまいます。
2: .httaccessの設定
以下のように記述した、.htaccessをサイトルートに新しく設置します。
(既にある場合は追記します)
AddType application/x-httpd-php .html
# BEGIN WordPress
RewriteEngine On
RewriteBase /
RewriteRule ^?([a-z0-9]+)=([0-9]+) wordpress/?$1=$2 [L]
RewriteRule ^(date|tag|feed)/(.*) wordpress/index.php [L]
RewriteRule ^(c1|c2|c3|c4)/(.*) wordpress/index.php [L]
RewriteRule ^category/(c1|c2|c3|c4)/(.*) wordpress/index.php [L]
RewriteRule ^(c1|c2|c3|c4)/feed/(.*) wordpress/index.php [L]
# END WordPress
AddType application
HTMLファイルでPHPスクリプトを使用可能にします。
ホームが「index.php」で構わない場合は必要ありません。
RewriteBase
「/」はサーバールートからの相対パスです。
もしもサイトルートが「test」だと「/test/」となります。
RewriteRule
条件を満たした場合に、WordPressのindex.phpを呼び出す、という指定です。
最初の二行は変更しないでください。
三行目以降の(c1|c2|c3|c4)に、WordPressを有効にしたいカテゴリー(ディレクトリ名)をパイプ区切りで指示します。
「information」「blog」なら(information|blog)と書きます。
「information/aaa」「blog/bbb/ccc」などの下層ディレクトリもWordPress配下となります。
アップロードしたら、.htaccessのパーミッションを444にしてください。
書き込み可になっていると、WordPressの設定を変更したときに上書きされてしまいます。
3: index.htmlの設定
最後に、サイトのホームにあたるindex.htmlに細工をします。
ファイル名を変更する
index.htmlの内容はそのままで、ファイル名を任意に変更してください。
ここでは「home.html」に変更したものとします。
このままだとhome.htmlでもアクセスできてしまうので、気になる場合は「include」などのディレクトリに入れ、アクセス制限をかけて対応してください。
新規にindex.htmlを作成する
index.htmlがなくなるので、以下のように記述したindex.htmlを新規に作成し、サーバーにアップします。
<?php
if(($_GET['s'])||($_GET['p'])) {
//検索かプレビューのGET値があればWordPressとして処理
define('WP_USE_THEMES', true);
require('wordpress/wp-blog-header.php');
} else {
//なければ静的コンテンツを呼び出す
require('home.html');
}
?>
コメントで書いてある通りですが、検索かプレビューだとWordPressとして処理を開始し、それ以外であれば先程リネームしたHTMLをそのまま出力します。
ここまでで作業は終わりです。
正常に動作していれば、
- 未保存のプレビューと検索結果
- 指定したカテゴリーと関連フィード
- 日別アーカイブ
- タグサーチ
のみWordPressが起動し、それ以外は静的コンテンツがあるサーバーと同じ挙動になります。
(例えカテゴリーを作っていても表示されません)
4: 注意点
- 一般的なサーバーで動作確認をしていますが、設置条件やサーバー状況によってはうまくいかないかもしれません。必ず検証してください。
- WordPressの404ページは有効になりません。必要な場合は.htaccessにエラーページ指定を追記して自作してください。
- HTML/PHP関係は、.htaccessの指定方法が上記と異なるサーバーも多いです。サーバー会社のマニュアルをチェックしたり「サーバー名 html php」などでグーグル先生にお尋ねしてください。