WAF・functions.php・.htaccessまで徹底解説(実体験ベース)
検証環境:Xserver/WordPress 6.x/PHP 8.1/WP Rocket使用/2025年5月時点の情報です。サーバーやプラグイン環境が異なる場合は手順が変わる可能性があります。
突然ログインできない恐怖
「ある日突然、WordPressにアクセスできなくなった。」
そんな経験ありませんか?
- サイトが真っ白に
- 「Access Denied」の文字だけが表示される
- ログイン画面が出てもパスワードが通らない
- 「500 Internal Server Error」で何も表示されない
- 「403 Forbidden」でアクセス自体を拒否される
私もまさにそんな状態に陥り、冷や汗をかきました。
しかし、ChatGPTを活用することで、専門知識がなくても無事に復旧できたのです。
この記事では、私が実際に体験したトラブルとその解決プロセスを、できるだけわかりやすく共有します。
コードを書かない私が直面する一番のデメリットはこの様なトラブルシューティングです。でも安心してください。今はChatGPTがあります。
私と状況が異なる場合でも、エラー情報をコピペしてそのままChatGPTに貼り付けてください。そうすると、的確な指示が得られます。あとはその通りに作業するだけ。
焦らず、粘り強く解決しましょう。
⚡ この記事が特に役立つ方
- Xserver(または同等のレンタルサーバー)でWordPressを運営している方
- WP Rocketなどキャッシュプラグインを使用している方
- FTPまたはファイルマネージャーの基本操作ができる方(ChatGPTで調べながらでもOK)
- 「Access Denied」「真っ白」「500エラー」などで今まさに困っている方
⚠️ この記事だけでは解決しにくいケース
- データベース自体が破損している場合
- WordPressのコアファイルが改ざんされている場合
- バックアップが一切なく複数ファイルが同時に破損している場合
- サーバー会社側の障害が原因の場合(まずサーバーの障害情報ページを確認)
【最初に確認】あなたの症状はどれ?原因の切り分けフロー
まずはパニックにならず、今の症状を確認してください。症状によって対処法が異なります。
📌 よくある「発生のきっかけ」も確認しておきましょう:トラブルは多くの場合、直前に行った作業が引き金になっています。プラグインの更新・追加、テーマの変更、WordPressのバージョンアップ、PHPのバージョン変更、.htaccessやfunctions.phpの手動編集などを行っていた場合は、その作業が原因である可能性が高いです。
| 症状 | 考えられる原因 | 難易度 | 平均復旧時間の目安 |
|---|---|---|---|
| 画面が真っ白(何も表示されない) | PHPエラー、テーマ・プラグインの不具合、メモリ不足 | ★★☆(FTP操作経験があれば対応可) | 30分〜1時間 |
| 「Access Denied」と表示 | WAF、.htaccess、IP制限、セキュリティプラグイン | ★★☆〜★★★ | 1〜3時間(複合原因の場合) |
| 「500 Internal Server Error」 | .htaccess破損、PHPエラー、プラグイン競合 | ★★☆ | 30分〜1時間 |
| 「403 Forbidden」 | パーミッション不正、WAF、海外アクセス制限 | ★★☆ | 15分〜1時間 |
| ログイン画面は出るがID/PWが通らない | パスワード破損、DB接続の問題、Cookieの問題 | ★☆☆〜★★☆ | 15分〜30分 |
| 「データベース接続確立エラー」 | wp-config.phpのDB情報不一致、DB障害 | ★★★(外注推奨の場合あり) | 1時間〜(DB修復を含む場合は数時間) |
| リダイレクトループ(何度もリロード) | SSL設定ミス、プラグイン競合、wp_optionsのURL不整合 | ★★☆ | 30分〜1時間 |
💡 「Access Denied」と「403 Forbidden」の違い
「403 Forbidden」はHTTPステータスコードで、サーバーがリクエストを理解したうえで許可しないことを意味します。「Access Denied」はその403エラーがブラウザやサーバーソフトによって日本語・英語で表示された画面です。基本的に同じ原因(WAF・パーミッション・IP制限など)で発生します。
この記事では主に「Access Denied」+複合原因の実体験を扱いますが、他の症状でも切り分けの考え方は共通です。
トラブル状況:ログインできない+トップページも表示されない
- 管理画面(wp-login.php)は開くが、ログインできない
- 正しいID・パスワードでも「Access Denied」
- トップページにアクセスしても同じく「Access Denied」
まるで、WordPressそのものがサーバーにブロックされたかのような状態でした。
ちなみに「Access Denied」が出る原因は1つではありません。以下のどれかに該当している可能性があります:
- WAF(Web Application Firewall)が誤検知でブロック
- .htaccessのIP制限やリダイレクトルールの誤設定
- セキュリティプラグイン(Wordfence、SiteGuard WP Plugin等)によるロックアウト
- サーバー側のブルートフォース攻撃対策によるIP一時ブロック
- 海外アクセス制限の設定(Xserverでは管理画面への海外IPブロックがデフォルトON)
- ファイルパーミッションの異常
⚠️ Xserverユーザーが見落としやすいポイント
Xserverには「海外アクセス制限」機能があり、デフォルトでWordPress管理画面への海外IPからのアクセスをブロックします。VPNを使っている場合や、海外出張・旅行中の場合は、この設定が原因でアクセスできなくなることがあります。サーバーパネル→「WordPressセキュリティ設定」→「海外アクセス制限設定」から確認・解除できます。
私の場合は、これらのうち複数が同時に発生しているという厄介なケースでした。他の上位記事では「原因は1つ」の前提で解説されていることが多いのですが、現実は複合的なことも少なくありません。
原因は複合的:WAF設定・.htaccess・index.php・functions.php
以下の複数要因が絡んでいました:
| 要素 | 問題内容 |
|---|---|
| WAF設定(PHP対策) | サーバー側の自動ブロック発動 |
| .htaccess | WP Rocketの記述との競合、ルール不整合 |
| index.php | パーミッションが「000」で読み取り不可 |
| functions.php | パスワード変更用の救出コードが残ったまま |
これだけの原因が重なるのは珍しいケースですが、実際に起こりうるということを知っておくだけでも、パニックにならずに済みます。他の上位記事では「原因は1つ」の前提で解説されていることが多いのですが、現実は複合的なことも少なくありません。
index.phpのパーミッションが「000」になっていた原因については、セキュリティプラグインの自動処理やサーバー側の保護機能が作動した可能性が考えられます。心当たりがない場合は、復旧後にサーバーのアクセスログやセキュリティプラグインのログを確認してみてください。
復旧手順:ひとつずつ順番に対応
⚠️ 作業前の最重要ルール:これから編集するファイル(.htaccess、functions.php、index.phpなど)は、必ず変更前にローカルPCへダウンロード保存してください。失敗しても元に戻せるようにするためです。
復旧にかかった時間の目安は約2〜3時間(ChatGPTとやりとりしながら)。焦らず進めれば大丈夫です。
📋 FTPを使えない方への代替手段
FTPソフト(FileZillaなど)が設定できていない場合は、Xserverのファイルマネージャー(サーバーパネル→「ファイル管理」)からもファイルの編集・ダウンロードが可能です。操作手順はFTPとほぼ同じです。ConoHa WINGや他のサーバーにも同様のファイルマネージャー機能があります。
Step 1:functions.phpで仮管理者ユーザーを追加
FTPまたはXserverファイルマネージャーで、/wp-content/themes/使用中のテーマ/functions.php を開き、以下コードを追加:
wp_create_user('仮ユーザー名', '強力なパスワード');
$user = get_user_by('login', '仮ユーザー名');
$user->set_role('administrator');
➡️ サイトにアクセスすると、自動的に管理者権限の仮ユーザーが作成されます。
⚠️ 注意点:
- このコードはStep 3で必ず削除してください。残したままにすると、アクセスのたびに同じユーザーを作成しようとしてエラーになります
- 仮ユーザー名・パスワードは推測されにくいものを設定してください
- 子テーマを使用している場合は、子テーマのfunctions.phpに追加してください
Step 2:WordPressにログイン → 本来のユーザー修復
Step 1で作成した仮ユーザーでWordPress管理画面にログインします。
ログインできたら、以下を確認・修復してください:
- 「ユーザー」メニューから本来の管理者アカウントを確認
- 本来のアカウントのパスワードをリセット(「パスワードを生成」ボタンを使用)
- 本来のアカウントの権限が「管理者」になっているか確認
本来のアカウントでログインできることを確認したら、次のステップへ進みます。
Step 3:functions.phpの救出コードを必ず削除
Step 1で追加したコードをFTPまたはファイルマネージャーですぐに削除してください。
削除後、ファイルを保存してサーバーにアップロードします。その後、仮ユーザーもWordPress管理画面の「ユーザー」メニューから削除しておきましょう。
⚠️ 削除を忘れると何が起きるか
救出コードを削除せずに放置すると、サイトへのアクセスのたびにユーザー作成処理が走り続けます。エラーログが膨大になるだけでなく、セキュリティリスクにもなります。必ずこのステップを完了させてください。
Step 4:.htaccessをWordPressデフォルト構成に修正
WordPressのルートディレクトリにある.htaccessファイルをFTPでダウンロードし、バックアップしてから編集します。
WP Rocketの記述などが原因で競合している場合、まず内容を以下のWordPressデフォルト構成に置き換えてみてください:
# BEGIN WordPress
RewriteEngine On
RewriteBase /
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
# END WordPress
保存してサーバーに上書きアップロードし、サイトが正常に表示されるか確認します。問題なければ、次のステップへ進みます。
WP Rocketなどのキャッシュプラグインを使っている場合は、復旧後にWordPress管理画面から「設定を保存」またはキャッシュをクリアすることで、プラグインが自動的に.htaccessへ必要な記述を追加してくれます。
Step 5:index.phpのパーミッション修正
FTPソフト(FileZillaなど)でWordPressのルートディレクトリにあるindex.phpを右クリックし、「パーミッション(属性)の変更」を選択します。
パーミッションが「000」になっていた場合は、「644」に変更してください。
| ファイル | 推奨パーミッション |
|---|---|
| index.php | 644 |
| .htaccess | 644 |
| wp-config.php | 600(セキュリティのため) |
| ディレクトリ(フォルダ) | 705 または 755 |
変更後、サイトにアクセスして正常に表示されるか確認してください。
Step 6:WAF(PHP対策)を一時OFF → 復旧後再ON
上記のStep 1〜5を実施してもまだアクセスできない場合、WAF(Webアプリケーションファイアウォール)が原因である可能性があります。
Xserverの場合、サーバーパネルから以下の手順でWAFを一時的に無効化できます:
- Xserverサーバーパネルにログイン
- 「WAF設定」をクリック
- 対象ドメインの「WAF設定(PHP対策)」をOFFに変更
- サイトへのアクセスを確認
- 復旧が確認できたら、必ずWAF設定を再度ONに戻す
⚠️ WAFをOFFにしたまま放置しないこと
WAFはサイトをサイバー攻撃から守る重要な機能です。復旧確認後は必ずONに戻してください。OFFのまま放置するとSQLインジェクションやXSSなどの攻撃に対して無防備になります。
ChatGPTを活用するコツ:エラー情報の伝え方
ChatGPTにトラブルを相談するとき、漠然と「WordPressにログインできない」と伝えるだけでは、的確なアドバイスをもらいにくいです。以下の情報をセットで伝えると、精度の高い回答が得られます。
- 表示されているエラーメッセージ(「Access Denied」「500」「403」など)をそのままコピペ
- 使用しているサーバー名(Xserver、ConoHa WING など)
- 直前に行った作業(プラグイン更新、PHPバージョン変更など)
- 使用しているプラグイン(WP Rocket、Wordfence など)
- WordPressのバージョンとPHPのバージョン
例:「Xserverでwordpress6.5を使っています。PHP8.1でWP Rocketを導入中です。昨日プラグインを更新したら、今日から管理画面にアクセスすると『Access Denied』と表示されてログインできなくなりました。FTPは使えます。どう対処すればよいですか?」
このように具体的な情報を伝えると、ChatGPTは状況を正確に把握して手順を提示してくれます。回答が的外れだと感じたら「○○の手順を試しましたが△△のエラーが出ました」と追加情報を渡して会話を続けてください。
復旧後にやっておくべき安全対策リスト
復旧に成功したら、再発防止のために以下を実施しておきましょう。
- ✅ 定期バックアップの設定:UpdraftPlusなどのプラグインや、Xserverの自動バックアップ機能を活用する
- ✅ WAFをONに戻す:一時的に無効化していた場合は必ず再有効化する
- ✅ ログインURLの変更:SiteGuard WP Pluginなどでwp-login.phpのURLを変更してブルートフォース攻撃を防ぐ
- ✅ 二段階認証の導入:Google AuthenticatorなどのプラグインでWordPressログインを二段階認証にする
- ✅ 管理者アカウントのユーザー名を「admin」から変更:攻撃者に狙われやすいデフォルトのユーザー名は変更しておく
- ✅ パーミッションの定期確認:wp-config.phpは600、ディレクトリは755に保つ
- ✅ プラグイン・テーマ・WordPressのアップデートを定期的に実施
実際の失敗から学んだこと
今回の経験を通じて、身に染みて感じたことがあります。
- バックアップは本当に大事:ファイルを変更する前にダウンロードしておくことで、何度でもやり直しが効きました。バックアップがなければ途中で詰んでいた可能性があります
- 一度に複数の変更をしない:1つ変更したら必ず動作確認する。これをしないと、何が原因だったかわからなくなります
- 救出コードの削除を忘れると二次被害が起きる:functions.phpに残したコードが原因で別のエラーが発生しかけました
- ChatGPTへの情報提供は具体的に:環境情報・エラーメッセージ・実施した作業をセットで伝えると、的確な指示が返ってきます
自力で直せるか?外注すべきか?判断基準
すべてのトラブルを自力で解決しようとする必要はありません。以下を目安に判断してください。
| 状況 | 推奨対応 |
|---|---|
| FTPやファイルマネージャーが使える・エラーメッセージが明確 | この記事+ChatGPTで自力対応を試みる |
| データベースエラーが出ている・コアファイルの改ざん疑いあり | 専門家への外注を検討(クラウドワークス・ランサーズなど) |
| バックアップが一切ない状態で複数ファイルが破損 | サーバーサポートへ問い合わせ+専門家への外注 |
| サイトが収益源で長時間のダウンが許容できない | 最初から専門家に依頼する |
Xserverのサポートはチャット・電話・メールで対応しており、緊急時は電話サポートが早いです。また、クラウドワークスやランサーズでWordPressの緊急復旧を請け負うフリーランサーも多数います。予算感は5,000〜30,000円程度が目安です。
よくある質問(FAQ)
- Q1. WAFをOFFにしても「Access Denied」が解消されません。他に確認すべきことはありますか?
- A. WAF以外にも、セキュリティプラグイン(SiteGuard、Wordfenceなど)によるIPロックアウト、Xserverの「海外アクセス制限」、.htaccessのIP制限記述が原因になっている場合があります。FTPでプラグインフォルダをリネーム(例:plugins → plugins_old)して一時的に全プラグインを無効化し、問題が解消するか確認してみてください。
- Q2. functions.phpにコードを追加したのに仮ユーザーが作成されません。
- A. 子テーマを使用している場合、親テーマのfunctions.phpではなく子テーマのfunctions.phpに追加する必要があります。また、コードを追加した後に必ずサイトにアクセス(ブラウザで表示)してください。アクセスしないとコードが実行されません。
- Q3. .htaccessをデフォルトに戻したら、WP Rocketの設定が消えてしまいました。
- A. 正常な動作です。WP Rocketの設定は.htaccessに書き込まれるため、初期化すると消えます。復旧後、WordPress管理画面→「WP Rocket」→「設定を保存」を実行するか、「ダッシュボード」からキャッシュをクリアすると、WP Rocketが自動的に.htaccessへ必要な記述を再追加します。
- Q4. パーミッションを644に変更したのにサイトが表示されません。
- A. index.php単体だけでなく、wp-login.phpやwp-includes、wp-adminフォルダのパーミッションも確認してください。ディレクトリのパーミッションが「000」になっているケースもあります。ディレクトリは755(または705)、PHPファイルは644が標準です。
- Q5. 今後また同じトラブルが起きないようにするにはどうすればいいですか?
- A. 定期バックアップの自動化(UpdraftPlusなど)、プラグインの更新前にバックアップを取る習慣、WAFとログイン制限の維持が基本です。特に「ファイルを編集する前に必ずバックアップを取る」ことを徹底するだけで、今回のような複合トラブルの多くは復旧可能になります。
まとめ
- WordPressの「Access Denied」はWAF・.htaccess・パーミッ
(Visited 538 times, 1 visits today)







