本サイトは Wordpress を使っているのですが、「パーマリンク」という設定を変更したらトップページ以外が 404 エラー(ページが見つからない時に表示されるエラー)となってしまい、困ったことになりました。 Google先生に質問しつつ無事に復旧することができたので、その際の対応をメモしておきます。
パーマリンクの変更
Wordpress に詳しいわけではなく調べつつ使っている状態なので、今から設定を変えてみたい、ということが出てきます。
これまでは、各ページの URI は
http://pomme-tech.com/?p=123
といったように、各ページを作成した際に割り振られるページIDを使ったものになっていました。
あまり考えずにディフォルト設定を使っていたのですが、Google Analytics上でページ名が「?p=xxx」と表示され、どのページを指しているのかが分からなくて困り始めました。
パーマリンクが何かというと
パーマリンクとは、ブログの個々の投稿、カテゴリーなどの投稿一覧ページへの恒久的(半永久的)な URL です。パーマリンクは、他のブロガーがあなたの投稿やセクションにリンクを張るときや、投稿へのリンクを Eメールで送ったりするときに使います。個別の投稿への URL は常に存在して決して変らないようにすべきです。そういう訳で、「perma」リンクといいます。
だそうです。
パーマリンクを変更するとページにアクセスする際のURLが変わってしまいます。 たくさんの被リンクを持つ人気サイトであればこれは死活問題なのかもしれませんが、ここは幸いというか残念ながらというか、まだほとんどアクセスもない状態なので、URLが変わっても影響はないはず!
ということで、パーマリンクを軽い気持ちで変更してみました。
設定はいたって簡単んです。 ダッシュボード から、設定 → パーマリンク設定 を開き、どのリンクにするかを選びます。
今回は、ディフォルト から 投稿名 に変更しました。
その後、個別ページにアクセスすると、エラーに!!!
復旧方法
404エラーの画面を見ると、URLは投稿名のものになっているのでパーマリンクの設定は反映されているようです。
調べてみると、原因はいくつかのパターンがあるようです。
- .htaccess ファイルのアクセス権がなく、設定が反映されていない。
- “httpd.conf”ファイルの”LoadModule”定義に"mod_rewrite”の設定がない
- “httpd.conf”ファイルに”AllowOverride All”の設定がない
.htaccessファイル
まず、.htaccess ファイルを確認してみました。
$ ls -la -rw-r--r-- 1 apache apache 236 10月 30 14:35 2014 .htaccess
書き込み権限が付与されているので、アクセス権には問題はなさそうです。 .htaccessファイルの内容は以下のようになっていて、こちらも問題はない感じです。
# BEGIN WordPress RewriteEngine On RewriteBase / RewriteRule ^index\.php$ - [L] RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule . /index.php [L] # END WordPress
LoadModule
続いて、httpd.conf ファイルの設定を確認してみます。
Syntax OK rewrite_module (shared)
問題なしです。
AllowOverride
では、AllowOverride の設定はどうでしょうか。
# grep AllowOverride httpd.conf
AllowOverride None # AllowOverride controls what directives may be placed in .htaccess files. AllowOverride None # AllowOverride FileInfo AuthConfig Limit # for additional configuration directives. See also the AllowOverride AllowOverride None AllowOverride None AllowOverride None
すべて”None”でした。ここか!
ということで、Wordpressのコンテンツが保存されているディレクトリを対象としたディレクティブの設定を変更します。
<Directory "/***/***/***"> Options Indexes FollowSymLinks AllowOverride None → AllowOverride All Order allow,deny Allow from all </Directory>
httpd.conf の設定を変更したら、httpdプロセスを再起動します。
# service httpd restart httpd を停止中: [ OK ] httpd を起動中: [ OK ]
この状態で個別ページにアクセスすると、無事に表示されました。 一安心です。