WordPressはパーマリンクをカスタマイズできる([設定] → [パーマリンクの設定])。
パーマリンクを変更したときhtaccessに書き込み権限があれば自動で更新される(書き込み権限がないときはhtaccessを手動で修正する)。
パーマリンクを変更したときhtaccessにはmod_rewrite(mod_rewriteはApacheのモジュール[2])が記述される。
パーマリンクを変更した際のhtaccessの記述例
WordPressをドキュメントルート直下にwordpressディレクトリを作成してインストールした場合の基本例。
</p> <h1>BEGIN WordPress</h1> <p><IfModule mod_rewrite.c> RewriteEngine On RewriteBase /wordpress/ RewriteCond %{REQUEST_FILENAME} !-f -------- (1) RewriteCond %{REQUEST_FILENAME} !-d -------- (2) RewriteRule . /wordpress/index.php [L] ---------- (3) </IfModule></p> <h1>END WordPress</h1> <p>
(1)(2) 実際のファイルまたはディレクトリが存在しない場合に限り(3)の処理を実行する[3]。
(3) (1),(2)を満たすアクセスをドキュメントルート直下のwordpressディレクトリにあるindex.phpへリライトして処理を終了する。
NTT コムの場合のhtaccess
デフォルトは下記の通り。
RewriteEngine On RewriteCond %{HTTPS} on RewriteRule (.*) http://%{HTTP_HOST}%{REQUEST_URI} [L]
パーマリンクを下記の通り設定した際のhtacess
/%category%/%post_id%.html
RewriteEngine On -- (1) RewriteCond %{HTTPS} on -- (2) RewriteRule (.*) http://%{HTTP_HOST}%{REQUEST_URI} [L] - -- (3)</p> <h1>BEGIN WordPress</h1> <p><IfModule mod_rewrite.c> RewriteEngine On RewriteBase /wordpress/ RewriteRule ^index.php$ - [L] --- (4) RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule . /wordpress/index.php [L] </IfModule></p> <h1>END WordPress</h1> <p>
(1), (2), (3)
RewriteEngine On
RewriteCond %{HTTPS} on
RewriteRule (.*) http://%{HTTP_HOST}%{REQUEST_URI} [L]
の説明は下記のサイトがとても分かりやすい。
» トーハム紀行: mod_rewriteでディレクトリ別にSSLのON/OFFを切り替える
(4) ドキュメンルート直下のindex.htmlはリライトしない。
リンク
[1] mod_rewriteはApacheの設定ファイルhttpd.confに記述してもよいが本記事はhtaccessを使うことを前提とする。
[2] mod_rewriteはApacheのモジュールなのでインストールされていない場合やされていてもhtaccessを使用できない場合はパーマリンクを変更できない。
[3] RewriteCondはRewrite Conditionの略。