Wordpressでパーマリンクを変更したら投稿や固定ページなどトップページ以外のページが全て404(Not Found)になってしまった!
そんな時に確認したいのがサーバー上にある「.htaccess」の内容です。
Wordpressの場合、サーバー上にある「.htaccess」にはパーマリンクの使用や変更を前提としたコードが始めから書かれていることが殆どですが、これが無いとパーマリンク変更後にトップページ以外が404になることがあります。
404ページで表示される画面がサイトではなく、サーバー上のもので表示される場合はこの可能性が高いです。
この記事の目次
パーマリンク変更後に404エラーが出る時の確認
慌てると良くありませんので落ち着いて対処しましょう・w・
まずは下記の状態に当てはまるかチェックして下さい。
- トップページが表示される。
- 投稿や固定ページ、カテゴリーページなどが404になる。
- 404ページのテンプレートがサーバー会社のもの。
- パーマリンク設定を元の設定に戻すと治る。
当てはまるならこの記事の内容で治る可能性が高いです。
エラー時の状況
お急ぎだと思うので、僕が陥った状態をサクッと。
この度はXserverで運営しているサイトでこの問題が発生しました。
パーマリンク設定を基本からカスタム構造に変更しました。
変更後、投稿や固定ページだけでなくカテゴリーや記事一覧などトップページ以外のページにアクセスするともれなくサーバー会社(Xserver)の404が表示されます。
URLを変更前のURLに合わせても404(Not Found)になります。
対処法1.パーマリンク設定を元に戻す
まずは簡単な修復方法です。
直接的な解決にはならないかもしれませんが、確認だけでもして下さい。
管理画面左メニュー > 設定 > パーマリンク
に進みます。
画面が開いたら、パーマリンク変更前の設定に戻します。
僕は「基本」にしていたので基本にチェックして「変更を保存」をクリック。
ここでトップページ以外のページを確認して下さい。
無事に変更前のように全ページが表示されればOKです。
キャッシュが悪さをしている可能性もありますので、サーバーキャッシュとブラウザキャッシュもクリアして確認してみて下さい。
(分からない人は別のブラウザで確認する。)
対処法2.サーバー上の.htaccessを編集する
対処法1で全ページが表示された場合、サーバー上でリダイレクト設定などを司っているファイル「.htaccess」の内容に不備がある可能性が高いです。
このファイルを確認しましょう。
「.htaccess」はWordpressのファイルである「wp-content」等と同じファイル階層にあるものを編集します。
FTPソフトやサーバー会社のファイルマネージャー等でサーバーにログインします。
サーバーにログインしたら下記のファイルを開きましょう。
public_html > .htaccess
注意点として「.htaccess」は隠しファイルです。
cPanelのファイルマネージャーの場合は表示されませんので注意です。
(ファイルマネージャーの画面右上の設定変更で表示できます。)
ファイルを開いたら下記のような記述があるか確認します。
.htaccess
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}]
RewriteBase /
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>
ある場合は大体#BEGIN WordPress~#END WordPressの間にあると思います。
こんな感じです。
2行目のE=HTTP_AUTHORIZATION~はない場合があるかも...
この記述が問題なく存在する場合は、本記事とは別の何かが原因です…
パーマリンクの変更はURLの変更なので、ページを引き継ぐにはリダイレクト設定が必須です。リダイレクト作業がまだの場合は変更前のページが404になります。
コードを追記する
「.htaccess」がサーバー上にあり、上記のコードが見当たらない場合は次のコードを追記することで解決できるはずです。
注意ポイント
.htaccessのバックアップは必ず取ってください。
(作業前にPCにダウンロードしておく)
.htaccess
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}]
RewriteBase /
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>
2行目のE=HTTP_AUTHORIZATION~は抜いても動くはずです。
詳しい説明をすると長くなるのでこの記事では割愛します。
上記コードを保存した後、404になっていたページを確認して下さい。
.htaccessが存在しない場合
サーバー上のpublic_html内に.htaccessがない場合は多くないと思いますが一応。
隠しファイルの表示もONにしているのに.htaccessが存在していない場合は、新規にアップロードすればOKです。
作業内容は以下です。
- PCのメモ帳等で「htaccess.txt」というファイルを作成
- 先ほどのコードをコピペして保存
- 作成したファイルをサーバー上のpublic_htmlにアップロードする
- ファイル名を編集して「.htaccess」に変更する
パソコン内では「.」から始まるファイル名は「.」が無くなってしまうことがあるので、サーバー上にアップロードしてから頭に「.」を付けるのが確実です。
記述にミスがあればエラーが出る
ないことを祈りますが一応...
.htaccessに問題があるとサーバーで500エラーが発生してしまいます。
僕が作業した時はローカルにあるXAMPP内の.htaccessからコードをコピペしたのですが、そもそもトップページのディレクトリパスが違っていたので本番環境でエラーが出ました。
その時はコードが以下のようになっていたからです。
- RewriteBase /wordpress/
- RewriteRule . /wordpress/index.php [L]
マルチサイトなどの方はコードのディレクトリ指定部分にお気を付けて。
(そんなレベルの人は自己解決できると思うけど...)
まとめ
Wordpressのパーマリンク設定を変更したらトップページ以外のページで404エラーが発生してしまった時の対処法でした。
パーマリンクの変更はURLの変更なので404エラーが多発する可能性が高いです。
今回はWordpressのパーマリンク変更時に使用されるであろう記述が.htaccessにないことが原因でした。
サーバーによるものか、今回たまたま記述がなかったのかは不明です…