WordPress(ワードプレス)の移行でトップページ以外のリンクが全て404になってしまう場合の原因を解説いたします。
トップページ以外が表示されない理由
ワードプレスで移行した際に、トップページ以外が表示されなく理由の最も良くあるパターンが、htaccessファイルの不正です。ワードプレスには、パーマリンクというURLを見せかけだけ変更する機能がついており、サイト内リンクの大部分がこの機能で制御されています。
また、このパーマリンクの機能はhtacessファイルというサイト全体の制御をするサーバーサイドの設定ファイルに書き込まれている為、このファイルが無かったり、設定がおかしかったりすると移行後にサイト内のリンク切れが発生する事があります。
パーマリンクを設定しているhtaccessファイルの中身
一般に、htaccessファイル(ワードプレスがインストールされているトップディレクトリに必ず存在しています)はシングルサイトの場合、下記のようになっています。
# 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
またマルチサイトの場合は下記のようになっています。
# BEGIN WordPress <IfModule mod_rewrite.c> RewriteEngine On RewriteBase / RewriteRule ^index\.php$ - [L] # add a trailing slash to /wp-admin RewriteRule ^wp-admin$ wp-admin/ [R=301,L] RewriteCond %{REQUEST_FILENAME} -f [OR] RewriteCond %{REQUEST_FILENAME} -d RewriteRule ^ - [L] RewriteRule ^(wp-(content|admin|includes).*) $1 [L] RewriteRule ^(.*\.php)$ wp/$1 [L] RewriteRule . index.php [L] </IfModule> # END WordPress
結構複雑に見えますが、この中で、パーマリンクの設定等にとって最も重要な行が下記の二つの行となります
RewriteBase /
RewriteRule . /index.php [L]
この二つが、ワードプレスがインストールされているディレクトリになっているか確認しましょう。例としてワードプラスのサイトURLが http://aaa.com/wp/ の場合上記二つの設定は下記のようになっていなければいけません。
RewriteBase /wp/
RewriteRule . /wp/index.php [L]
移行時に、htaccessファイルをコピーするのを忘れていたり、ディレクトリ構造が変わった場合はこちらの設定不全によりパーマリンクが繋がらない結果となる可能性がございます。
また、ワードプレスにはhtaccessを自動で書き出してくれる機能もついていますので、管理画面左メニューより「設定」→「パーマリンク設定」から、そのままの状態で「変更を保存」ボタンを押すだけで、ワードプレスが正しいhtaccessファイルを書き出してくれて、問題が解決する事もあります。
*ワードプレスのトップディレクトリを、FTPソフトウェアで書き込み可の権限にしないと自動書き出しが正常に動作しない場合があります
テーマのリンクの書き換えが必要な事例
ワードプレスのサイトを別のURLに移行したときに、例えばオリジナルテーマにメニューのリンク等がテーマの中でフルパス(http://ドメイン名/~~~の用な形式のリンク)で記載されているとリンクがずれて、繋がらなくなってしまうという事も事例としてございました。
この場合は、テーマに含まれているフルパスのリンクを全て書き換える必要があります。
テーマファイルは、管理画面の「外観」→「テーマの編集」よりコードを確認できます。管理画面の「外観」→「テーマの編集」を選択されたら、メニューのコード内容を確かめるには、テーマ編集画面の右メニューより、hrader.phpを確認します。
*メニューのコードの多くはheader.phpに含まれている事が多いです
mod_rewriteの不具合
その他にもごく稀ですがVPSなどルート権限があるサーバーをご利用になっており、apacheというサーバーのmod_rewriteというモジュール が使用可になっていない事という原因も考えられます。
mod_rewriteを有効にするLinuxコマンドは下記となります
sudo a2enmod rewrite
sudo service apache2 restart
ワードプレスドクターではmod_rewriteの設定を 変えたり、無い場合はサーバーにインストールして問題を修正させていただく事も可能です。
WordPress(ワードプレス) 移行での不具合の解決はWPドクターにお任せください。ご依頼やもっと詳しいサービス内容はこちらから