解 説

WordPressでパーマリンクを変更する場合サーバーがmod_rewriteモジュールの使用を許可してないと使えません。

mod_rewriteモジュールとは

mod_rewriteモジュール とはURLの書き換えなどを行うモジュールです。
WordPressでは人にわかりやすいような特定のURLでアクセスをしても機械的なURLへ書き換えを行うことができます。
これがパーマリンクの変更です。
例えば、「http://localhost/wp_green/?p=123」を人にわかりやすい「http://localhost/wp_green/sample-post/」とすることができるわけです。
このときWordPress内部では「http://localhost/wp_green/sample-post/」を「http://localhost/wp_green/?p=123」と変換しています。
このときに使用する仕組みがmod_rewriteです。
mod_rewriteを有効にするにはWebサーバのApacheに対して設定を行う必要があります。
「Apache」の設定を行う場合「httpd.conf」で行いますが、このように一部の機能を変更したい場合はその機能を使用するフォルダに.htaccessファイルを置いてその中に記述を行います。

.htaccessのmod_rewrite記述

ドメインにwordpressフォルダを作成してWordPressをインストールした場合の例です。
.htaccessの例
[text]
# BEGIN WordPress
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /wordpress/
RewriteRule ^index\.php$ – [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /wordpress/index.php [L]
</IfModule>

# END WordPress
[/text]
それぞれのコードの意味を確認しましょう。

IfModule

<IfModule mod_rewrite.c>
これは現在のサーバー環境でmod_rewriteが使用できるか確認しています。
<IfModule test>…</IfModule> セクションは、test で指定するモジュールが組み込まれているときのみ処理されます。

RewriteEngine

RewriteEngine On
これはmod_rewriteの機能を有効にします。Offと記述すれば無効にします。

RewriteBase

RewriteBase /wordpress/
これはRewrite処理後にベースとなるURLの指定しています。ここではルートの下にwordpressというフォルダが存在してその中がベースとなるURLになります。
例えば以下のようなURLです。
example.com/wordpress/

ルート相対パス

/wordpress/の書き方について
パスを書くときに「/」から始めるとルートディレクトリを基準にアクセスすることになります。
この書き方をルート相対パスと呼びます。
ベースとなるURLがルート(ドメイン直下)なら「RewriteBase /」という書き方になります。

RewriteCond

RewriteRule ^index\.php$ – [L]
要求ファイル名が、index.phpなら、そのまま処理を続けなさい。

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCondではルールの定義を行います。
REQUEST_FILENAMEとは環境変数と呼ばれる変数の一部です。
サーバ変数を参照して、それが指定した正規表現のパターンと一致していれば、次の条件を引き続き実行することになります。

!-fについては、
-f が「ファイル」、! が否定なので、「ファイルが存在しない場合」になります。
!-dについては、
-d が「ディレクトリ」、! が否定なので、「ディレクトリが存在しない場合」になります。
つまりこれらは、URLで指定したファイル名とディレクトリ名が存在しない場合に次の処理をするという意味になります。

注意
複数回RewriteCondが続いた場合は、全てのRewriteCondで真となる必要があります。(And条件)
偽が1つでもあるとRewrite処理の対象から外れてしまいます。
この例の場合はファイルもディレクトリも両方存在しない場合となります。

RewriteRule

RewriteRule . /index.php [L]
これはURLの書き換えを行うルールを記述しています。

RewriteRule [正規表現パターン] [置換パターン] [オプション]

「.(ドット)」はURLの正規表現です。ドットはどのような条件でも適用するという意味です。
「すべてのリクエストは/index.phpに書き換えられる」ということになります。
「[L]」Lastという意味で、このルールが最後。つまり以降のルールは適用されません。

結局この構文に書かれている内容は、
urlがindex.phpならそのまま処理を続け、URLでリクエストされたファイル名かディレクトリ名のところに実物のファイルか実物のディレクトリがあればそれを返し、なければWordpressのindex.phpに行くように命令しています。

index.phpから(wordpressのインストールディレクトリ)/wp-include/rewrite.phpへ転送されて、リクエストされたURLを解析してindex.phpにパラメータを付けた元のURLのかたちに書き換えることをおこなう仕組みになっているようです。つまり、
「http://localhost/wp_green/sample-post/」を「http://localhost/wp_green/?p=123」に変換できるのです。

参考
URLを書き換える -Rewrite機能

WordPressのURLをhackする