WordPressのデフォルト.htaccessファイル:コードと復元方法
WordPressがパーマリンク用に書き込むデフォルトの.htaccessコード、各行の役割、投稿が404になるのにホームページは表示される場合の復元方法を解説します。
WordPressのデフォルト.htaccessファイルは、/2026/10/post-name/のようなパーマリンクが404にならずに機能するように、ソフトウェアがサイトのルートにある.htaccessに書き込む短いRewriteEngineブロックです。次のような内容です。
# BEGIN WordPress
<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>
# END WordPress
これらのルールは、WordPressがこのブロックを生成するコードから来ており、WordPress自身の.htaccessガイドとも一致します。WordPressは# BEGIN WordPressの直後に3行のコメントも書き込み、マーカーの間の編集は上書きされると警告します。このコメントはルールの動作を変えません。
サブフォルダへのインストールでは、WordPressはサブフォルダのパスをRewriteBaseと最後のルールの両方に入れます。たとえばRewriteBase /blog/とRewriteRule . /blog/index.php [L]です。マルチサイトネットワークは別のブロックを使い、WordPressはその場合このファイルを自動では書き込みません。
重要なポイント
- WordPressは、書き込み権限があり、パーマリンクがプレーン以外に設定されていれば、ApacheとLiteSpeedでこのブロックを生成します。設定 > パーマリンクを開くだけで十分です。
- ファイルが欠落または破損していると、ホームページは読み込めるのにパーマリンクは404になります。ホームページにはリライトルールが不要だからです。
- 自分やプラグインが追加するものは
# BEGIN WordPressの上に置き、マーカーの内側には決して置かないでください。WordPressはファイルを更新するときにマーカーの間をすべて置き換えます。

index.php を使いました。各行の実際の役割
RewriteEngine Onは、このディレクトリでApacheのmod_rewriteモジュールを有効にします。これがないと、以下のリライトルールは何もしません。
RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}]は、URLを変更せず(-はその意味です)、リクエストのAuthorizationヘッダーをサーバー変数にコピーします。WordPressはその変数を読み取り、アプリケーションパスワードのようにヘッダーで送られたユーザー名とパスワードを受け取ります。
RewriteBase /は、Apacheが書き換え後のURLに使うパスの接頭辞を設定します。WordPressはサイトの場所に合わせて設定するので、サブフォルダへのインストールではRewriteBase /blog/になります。
RewriteRule ^index\.php$ - [L]はガードです。リクエストがすでにindex.phpであれば、書き換えを止めてそのまま通します。
2つのRewriteCond行が実際のロジックです。%{REQUEST_FILENAME} !-fと!-dは「このリクエストは実際のファイルに一致せず、実際のディレクトリにも一致しないか?」を確認します。最後のルールが動くには両方が真でなければなりません。そのため実際の画像、CSSファイル、アップロードされたPDFは直接配信され、WordPressのルーティングを通りません。
RewriteRule . /index.php [L]がパーマリンクを機能させます。2つの条件を通過したものはすべてindex.phpに送られ、そのURLがどの投稿、ページ、アーカイブを指すかをWordPressが判断します。
WordPressがこのファイルを再生成するとき、しないとき
WordPressは設定 > パーマリンク画面が読み込まれるたびにリライトルールをフラッシュするので、開くだけで十分で、変更を保存をクリックする必要はありません。.htaccessが存在しない場合、フォルダが書き込み可能でパーマリンクがプレーン以外に設定されていれば、WordPressがファイルを作成します。ファイルが存在して書き込み可能であれば、WordPressはマーカーの間のブロックを置き換えます。
次の場合は、それでは問題が解決しません。
- ファイルまたはそのフォルダが書き込み可能でない(PHPを実行するユーザーから見て)。画面には
.htaccessファイルが書き込み可能でないというエラーが表示され、貼り付けるルールも一緒に表示されます。一部のホストでは、PHPはFTPでアップロードしたファイルの所有者とは別のシステムユーザーとして動作します。そのためFTPクライアントでは問題なく見える権限でも、WordPressがブロックされることがあります。 - nginxを使っている。 WordPressのnginxガイドによると、nginxには
.htaccessのようなディレクトリ単位の設定ファイルがなく、WordPressはサーバー設定を変更できません。同等のルーティングはサーバー設定内のtry_filesディレクティブで、管理者が編集する必要があります。 AllowOverrideがNoneに設定されている(Apacheのメイン設定で、サイトのディレクトリに対して)。Apacheのドキュメントにはこうあります。“This means .htaccess files are completely ignored unless you explicitly enable them for a directory.” つまり、ディレクトリに対して明示的に有効にしない限り、.htaccessファイルは完全に無視されます。WordPressが完璧なファイルを書いても効果はありません。リライトルールにはAllowOverride FileInfo(またはAll)が必要で、ホスト側での変更が必要な場合があります。- パーマリンクがプレーンに設定されている。 プレーンなURLにはリライトルールが不要なので、WordPressはファイルを作成しません。
手動で復元する方法
ホームページは動くのに投稿やページが404になる場合、まず.htaccessの欠落や破損を確認します。修正は2ステップです。
1. まずワンクリックの修正を試します。 wp-adminで設定 > パーマリンクを開き、何も変更せずに変更を保存をクリックします。WordPressがファイルに書き込めれば、これで再生成されます。書き込めない場合は、画面にエラーと必要なルールが表示されます。
2. それでも直らなければ、手動でファイルを作成します。 FTP/SFTPまたはホストのファイルマネージャーで接続し、サイトのルートフォルダ(通常はwp-adminがあるフォルダ)に移動します。.htaccessが存在するか確認します。ドットファイルなので、一部のファイルマネージャーでは初期状態で非表示です。「隠しファイルを表示」を有効にしてください。
- 存在しない場合は、正確に
.htaccessという名前の新しいファイルを作成します(.txtは付けず、ドットの前にも何も付けません)。 - WordPressが表示したルール、またはこのガイド冒頭のデフォルトブロックを貼り付けます。サブフォルダへのインストールでは、
RewriteBaseと最後のルールを合わせて変更します。 - 保存し、投稿のパーマリンクを再読み込みして動作を確認します。
それでも404になる場合は、.htaccessが無視されている可能性があります。AllowOverrideをホストに確認してください。これがオフだと、Apacheは正しいファイルも無視します。
独自のルールとWordPressのブロック
プラグインや手動編集で、リダイレクト、ホットリンク保護、キャッシュヘッダーなどの独自ルールが追加されることがあります。それらはWordPressのブロックの外、かつ上に置き、WordPressのキャッチオールルールより先に実行されるようにします。
# Rules you or a plugin added: ABOVE the WordPress markers
<FilesMatch "\.(jpg|jpeg|png|gif)$">
# example: hotlink protection, caching rules, etc.
</FilesMatch>
# BEGIN WordPress
<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>
# END WordPress
# BEGIN WordPressと# END WordPressの間に置いたものは、次にWordPressがファイルを更新したときに失われます。パーマリンク画面を読み込むだけでこの更新が起こります。マーカーの前後の行は保持されます。リダイレクトについては、WordPressの.htaccessリダイレクトルールを正しく設定する方法で置き場所とループの回避方法を確認してください。
ファイルの編集直後に500 Internal Server Errorが出た場合は、変更したばかりの箇所が原因です。Apacheのドキュメントによると、エラーログには許可されていないディレクティブまたは構文エラーが示される可能性が高いです。古いチュートリアルからコピーしたルールが原因になることがあります。mod_access_compatが読み込まれていない限り、OrderはApache 2.4では無効なコマンドです。編集を元に戻してサイトを復旧してから、エラーログを読んでください。
デフォルトブロックの先へ
デフォルトブロックが扱うのは、パーマリンクのルーティングとAuthorizationヘッダーだけです。/uploadsでのPHP実行をブロックする、wp-config.phpへの直接リクエストを拒否するなど、機密ファイルへのアクセスを厳しくするには、本当に役立つWordPressの.htaccessセキュリティルールをご覧ください。パーマリンク構造の誤り、古いルールを配信するキャッシュ層、マルチサイトのサブディレクトリの競合など、別の理由でパーマリンクが404になる場合は、WordPressのパーマリンクが機能しない場合で他の原因を確認できます。
よくある質問
WordPressのデフォルト.htaccessファイルとは何ですか?
サイトのルートにある.htaccessファイルの# BEGIN WordPressと# END WordPressの間にWordPressが書き込むRewriteEngineブロックです。AuthorizationヘッダーをPHPに渡し、実際のファイルやフォルダではないリクエストをすべてindex.phpに送ります。
WordPressの正確なデフォルト.htaccessコードは何ですか?
RewriteEngine On、AuthorizationヘッダーをPHPに渡すルール、RewriteBase /、index.phpをそのまま通すルール、リクエストが実際のファイルやフォルダではないことを確認する2つの条件、そして残りすべてをindex.phpに送る最後のルールです。完全なブロックはこのガイドの冒頭にあります。
ホームページ以外のすべての投稿が404になるのはなぜですか?
Apache上で.htaccessファイルが欠落または破損していると、このパターンになります。サーバーはリライトルールなしでホームページを見つけられます。他のパーマリンクはindex.phpに到達するためにこのルールを必要とするので、ルールがなければApacheは存在しないファイルを探して404を返します。
WordPressは.htaccessを自動的に再生成しますか?
はい。mod_rewriteが有効なApacheまたはLiteSpeedで、パーマリンクがプレーン以外に設定され、WordPressが書き込める場合です。設定 > パーマリンクを開くだけで実行されます。ファイルが存在しない場合はフォルダが書き込み可能である必要があり、既存のファイルは書き込み可能である必要があります。そうでなければ、画面にエラーが表示され、手動で貼り付けるルールも一緒に表示されます。
nginxにWordPressの.htaccessファイルがないのはなぜですか?
nginxには、Apacheの.htaccessのようなディレクトリ単位の設定ファイルがありません。同じルーティングはnginxのサーバー設定にtry_filesルールとして記述します。WordPressはこの設定を変更できないため、管理者が編集する必要があります。
パーマリンクを保存した後に.htaccessが壊れたのはなぜですか?
カスタムルールが# BEGIN WordPressと# END WordPressのマーカーの内側に置かれていないか確認してください。WordPressはファイルを更新するときにマーカーの間をすべて置き換えるので、そのルールは失われます。カスタムルールはマーカーの上に置いてください。
出典
- WordPress Advanced Administration: .htaccess
- WordPress Advanced Administration: Nginx
- WordPressのソースコード: class-wp-rewrite.php, options-permalink.php, misc.php, load.php, user.php, vars.php
- Apache HTTP Server 2.4: .htaccess files, mod_rewrite, Upgrading to 2.4
デフォルトのパーマリンクブロックに、本当に必要なセキュリティやリダイレクトのルールを加えた、きれいで正しい.htaccessを作り直すには、無料のWordPress .htaccessジェネレーターをお使いください。
FAQ
よくある質問
WordPressのデフォルト.htaccessファイルとは何ですか?
サイトのルートにある.htaccessファイルの# BEGIN WordPressと# END WordPressの間にWordPressが書き込むRewriteEngineブロックです。AuthorizationヘッダーをPHPに渡し、実際のファイルやフォルダではないリクエストをすべてindex.phpに送ります。
WordPressの正確なデフォルト.htaccessコードは何ですか?
RewriteEngine On、AuthorizationヘッダーをPHPに渡すルール、RewriteBase /、index.phpをそのまま通すルール、リクエストが実際のファイルやフォルダではないことを確認する2つの条件、そして残りすべてをindex.phpに送る最後のルールです。完全なブロックはこのガイドの冒頭にあります。
ホームページ以外のすべての投稿が404になるのはなぜですか?
Apache上で.htaccessファイルが欠落または破損していると、このパターンになります。サーバーはリライトルールなしでホームページを見つけられます。他のパーマリンクはindex.phpに到達するためにこのルールを必要とするので、ルールがなければApacheは存在しないファイルを探して404を返します。
WordPressは.htaccessを自動的に再生成しますか?
はい。mod_rewriteが有効なApacheまたはLiteSpeedで、パーマリンクがプレーン以外に設定され、WordPressが書き込める場合です。設定 > パーマリンクを開くだけで実行されます。ファイルが存在しない場合はフォルダが書き込み可能である必要があり、既存のファイルは書き込み可能である必要があります。そうでなければ、画面にエラーが表示され、手動で貼り付けるルールも一緒に表示されます。
nginxにWordPressの.htaccessファイルがないのはなぜですか?
nginxには、Apacheの.htaccessのようなディレクトリ単位の設定ファイルがありません。同じルーティングはnginxのサーバー設定にtry_filesルールとして記述します。WordPressはこの設定を変更できないため、管理者が編集する必要があります。
パーマリンクを保存した後に.htaccessが壊れたのはなぜですか?
カスタムルールが# BEGIN WordPressと# END WordPressのマーカーの内側に置かれていないか確認してください。WordPressはファイルを更新するときにマーカーの間をすべて置き換えるので、そのルールは失われます。カスタムルールはマーカーの上に置いてください。