WordPressでパーマリンクを設定してもページが404not foundになる時の対処法

WordPressでパーマリンクを設定してもページが404not foundになる時の対処法

2012年9月18日
スポンサーリンク
[PR] このページではアフィリエイトプログラムを利用しています

Photo by adactio

最近WordPressにブログを移行しました。てとこん(@tetokon)です。

しかし、移行して早々パーマリンクの設定で物凄くつまずいたので、ここでメモしておきます。

今後同じ現象に悩まされるどなたかのお力になれれば幸いでございます。

何故かデフォルトの設定でしかリンクにとべない

WordPressはパーマリンクの形式を色々選択できるのですが、何故かデフォルトの設定以外ではうまく機能せず、リンク先が404のnot foundエラーになってしまいます。

デフォルトの設定以外ではどれを選んでもうまくいかない…

パーマリンク設定  でーじてとこん  WordPress

mod_rewriteが必要

色々調べた結果、WordPressでパーマリンクを使うためには、mod_rewriteというApacheモジュールが必要らしいとのこと。

Apacheモジュールがよくわからない方にざっくり説明させていただきますと、ApacheというのはWebサーバーソフトウエアの名前です。

世の中的におそらく一番使われているWebサーバーです。

WordPressはこのApacheというWebサーバー上で動いているのですが、パーマリンクの設定をするのに、Apacheのmod_rewriteという機能を使っているらしいのです。

そこで私は、きっとこのmod_rewriteの機能がうちのサーバーでは有効になっていなくて、だからうまく動いてないんだ!と思いました。

Apacheはちょっとだけ知っている私は、Apacheの設定ファイルhttpd.confにmod_rewriteを有効にする設定を書けばそれで解決するんじゃね?と思ったのですが…それが甘かった…orz

httpd.confに設定できない

mod_reriteが必要というところまでたどり着いた私は、あとはApacheの設定ファイルにちょちょいと設定を追加するだけだと、意気揚々とサーバーにアクセスしました。

そこで気がついたのです。

あれ?そういえばうちのサーバーってどこにApache入ってるの?

このブログはsixcoreでサーバを借りているのですが、WordPressのインストールもワンクリックインストールというsixcoreの機能でやっただけだったので、自分でApacheのインストールなんぞやった覚えがありません…

きっとサーバーに最初からApacheはインストールされていて、それを使っているんだと思います。

つまりApacheの管理はsixcoreさん側がやっていて、私たちユーザー側からはhttpd.confが触れないようになっていると思うのです。

でもsixcoreのサポートページを見るとちゃんとmod_rewrite使えるよ!って書いてあります。

マニュアル マルチドメイン対応高コストパフォーマンス 共有レンタルサーバー シックスコア sixcore

使えるらしいけどどうやって設定するのかがわからない…困った…ホントに困った…

Apacheの設定はhttp.confだけじゃない!.htaccessの存在を知る

http.confに設定できなくて途方にくれつつも、どうにかする方法があるはずだ!と調べまくる私。

そこで.htaccessの存在に辿り着きました!

以下Wikipediaからの引用

Apacheではhttpd.confという設定ファイルでApacheの設定を行うが、Webサーバの要となる設定ファイルであるため、Webサーバの管理者でないと設定を変更することができない。.htaccessはhttpd.confで.htaccessの利用を許可している場合、Webサーバ管理者のみならずウェブサイトの管理者レベルでApacheの一部設定を行えるようにしたものである。

おいおいどう考えてもこれだよこれのことだよこいつを使うに違いない!

あとは.htaccessの書き方を調べられればどうにかなるはず!

.htaccessに何を書くか

これも色々調べまくってそれらしいことを書いてあるページを見つけました!

英語だけど。

The htaccess Rules for all WordPress Permalinks : Perishable Press

WordPressをサーバーのルートディレクトリにそのままインストールしてる人はこんな書き方。


# BEGIN WordPress
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteRule ^indexÅ_.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>
# END WordPress

ルートディレクトリじゃなくて、例えば/foo/っていうサブディレクトにインストールしてる人はこんな書き方。

/foo/の部分はご自身の環境にしたがって書き換えてください。


# BEGIN WordPress
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /foo/
RewriteRule ^indexÅ_.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /foo/index.php [L]
</IfModule>
# END WordPress

これを自分のサーバーの、WordPressをインストールしているディレクトリに置いて解決しました。

長かった…二日ぐらいこれに費やしました…

ちなみにですが、そんなファイルねーよって方は、ご自身が使ってるFTPクライアントの設定を見なおしてみてください。

UnixとかのOSだとファイル名が.(ドット)から始まるファイルは不可視ファイルとされていて普通には見えません。

不可視ファイルを見えるようにする設定にしてみてください。

それでも見つからなかったらそもそも.htaccessファイルがない可能性があります。

ご自身で作ってください。

今回のでーじなところ

パーマリンクの設定でーじムズイ。

一回はまると相当ハマると思う( ;∀;)

ハマったどなたかにこの記事が助けになれば幸いです。