表示できなくなったサイトの原因特定と復旧(DNS・リダイレクト)

使用技術:, , ,
ドメイン・DNS・Webサーバー・WordPressの4階層を順に切り分ける診断フロー図。原因はWebサーバー層にあった

自社サイトでの対応事例

状況

ドメインにアクセスしてもサイトが表示されず、WordPressの管理画面にも入れない状態でした。ブラウザには DNS_PROBE_FINISHED_NXDOMAIN が表示され、「サーバーが落ちたのか」「ドメインが切れたのか」「WordPressが壊れたのか」が切り分けられていない状態からのスタートです。

この手のトラブルは、原因の階層を上から順に潰さないと解決しません。実際に踏んだ手順をそのまま記載します。

切り分けの手順

1. 名前解決の確認

まず対象ドメインと、同一サーバー上の別ドメインの両方でDNS解決を試しました。片方だけ解決できない場合は回線やDNSキャッシュの問題ではなく、そのドメイン固有の問題だと確定できます。ここでアクセスしようとしていたドメインが、そもそもレジストリに存在しないことが判明しました。

2. WHOISで登録状況を確認

JPRS WHOISで照会し、登録情報が存在しないことを確認。つまり「取得したつもりのドメイン」と「実際に契約しているドメイン」が食い違っていました。ネームサーバーをどう設定しても解決しない類の問題です。

3. 契約状況とサーバー設定の突き合わせ

サーバーの契約管理画面で保有ドメインを一覧し、実際に運用中のドメインを特定。SSLもPHPも「正常」と表示されているのに、そのドメインにアクセスするとまったく別のサイトへ転送されるという新たな症状が出ました。

4. サーバー側の設定ファイルを確認

/wp-login.php のような、WordPressが処理する前のURLまで転送されていたため、原因はWordPressではなくWebサーバー層だと判断。.htaccess を確認したところ、以下の記述が入っていました。

RewriteRule ^articles/(.*)$ https://example.com/articles/$1 [R=301,L]
RewriteRule ^css/(.*)$     https://example.com/css/$1     [R=301,L]
RewriteRule ^(.*)$ https://example.com/ [R=301,L]   ← 最終行がすべてを飲み込む

最終行の ^(.*)$ が、上のルールに該当しなかったすべてのURLを転送先トップページへ301で飛ばしていました。管理画面もログイン画面も例外なく対象になるため、WordPressには一切到達できません。過去に別サイトへ移行した際の設定が残っていたものです。

対応

  • 転送ルールを削除。ディレクトリ一覧の抑止(Options -Indexes)と文字コード指定は残し、必要な設定まで巻き添えで消さないようにした
  • 転送解除後、403 Forbidden(デフォルトドキュメントが存在しない) を確認。転送が消えたことと、公開ディレクトリが空であることを同時に確定させた
  • サーバーの管理画面にはWordPressの登録が残っていたが、wp-config.php が読み取れないというエラーが出ており、アカウント全体の総ファイル数も約110件だった。WordPress一式は通常2,000ファイル以上あるため、本体は既に削除されDBと登録情報だけが残った状態と判断し、クリーンな再構築に切り替えた
  • 復旧後、キャッシュされた301が残るため、URLにクエリを付けた状態で表示確認を行った

結果

項目対応前対応後
サイト表示別サイトへ301転送正常表示
管理画面へのアクセス不可可
WordPress本体実体なし(DBのみ残存)再構築済み

使用技術・確認したもの

DNS(名前解決・WHOIS)、Apache .htaccess(mod_rewrite)、エックスサーバー サーバーパネル、WordPress

この事例からお伝えしたいこと

「サイトが見られない」という症状は同じでも、原因はドメイン・DNS・Webサーバー・WordPressのどの層にもあり得ます。層を上から順に切り分けないと、当たりのつかない作業を延々と繰り返すことになります。今回もWordPressを疑って触っていたら、原因の .htaccess には永久にたどり着きませんでした。

本業でサーバーとネットワークの運用をしているため、この切り分けはWeb制作の範囲外にはなりません。制作だけでなく、公開後に「急に表示されなくなった」というご相談にも対応できます。