ApacheでAllowOverrideを設定する方法|.htaccessを有効化
- 開発環境
- .htaccess
- Windows
.htaccessが反映されない場合、httpd.confのAllowOverrideを確認します。ただし、検索で最初に見つかる<Directory />のAllowOverride NoneをAllへ変更してはいけません。Apache公式は、ファイルシステム全体を表すこのブロックをNoneのまま維持し、.htaccessを使用するディレクトリだけ個別に許可するよう案内しています。
本記事ではWindows版XAMPPを例に、対象ディレクトリの確認、AllowOverride FileInfoまたはAllの設定、Apacheの構文確認、再起動、動作テストまでを説明します。
変更してはいけない箇所:
<Directory />のAllowOverride Noneはそのまま残します。URLリライトだけが目的なら、実際のサイトを配置した<Directory>ブロックへAllowOverride FileInfoを設定します。あらゆる上書きを必要とする場合だけ、対象を限定してAllowOverride Allを使用してください。
| 検証項目 | 内容 |
|---|---|
| 使用環境 | Windows版XAMPP 8.2.12、Apache 2.4.58 |
| 設定ファイル | C:\xampp\apache\conf\httpd.conf |
| 主な目的 | .htaccessのURLリライトを有効化 |
XAMPPが未導入の場合は、先に「Windows版XAMPPのインストール方法」を確認してください。設定ファイルの編集にコードエディタを使う場合は、「VSCodeのインストール方法」も参照できます。
AllowOverrideとは
AllowOverrideは、.htaccessで使用を許可するApacheディレクティブの種類を、<Directory>単位で指定する設定です。
AllowOverride None:.htaccessを読み込まないAllowOverride All:.htaccessコンテキストで使用可能なすべてのディレクティブを許可するAllowOverride FileInfo:URLリライト、リダイレクト、レスポンス情報などに関するディレクティブを許可するAllowOverride AuthConfig:認証・認可に関するディレクティブを許可するAllowOverride Indexes:ディレクトリインデックスに関するディレクティブを許可する
Apache公式のAllowOverride資料によると、Allでは.htaccessコンテキストを持つすべてのディレクティブが使用可能になります。必要以上に広い権限を与えないため、目的に合う種類だけを指定する方法が基本です。
AllowOverride AllとFileInfoの違い
WordPressのパーマリンクや一般的なURL書き換えで使用するRewriteEngine、RewriteCond、RewriteRuleはFileInfoに含まれます。そのため、URLリライトだけが目的なら、通常は次の設定で足ります。
AllowOverride FileInfo
Apache公式のmod_rewrite資料でも、.htaccess内でリライトルールを使用するには、少なくともAllowOverride FileInfoまたはAllowOverride Allが必要と説明されています。
一方、使用するCMSやアプリが認証、Options、ディレクトリインデックスなど複数種類の設定を.htaccessへ記述する場合は、対象ディレクトリに限ってAllを使用することがあります。
| 目的 | 設定例 |
|---|---|
.htaccessを使用しない | AllowOverride None |
| URLリライト、リダイレクト | AllowOverride FileInfo |
| Basic認証も使用 | AllowOverride FileInfo AuthConfig |
| 複数種類の上書きが必要 | AllowOverride All |
設定前にhttpd.confをバックアップする
Windows版XAMPPの標準的な設定ファイルは、次の場所にあります。
C:\xampp\apache\conf\httpd.conf
XAMPPを別のフォルダーへインストールした場合は、実際のインストール先へ読み替えてください。
1. confフォルダーを開く
エクスプローラーでC:\xampp\apache\confを開き、httpd.confがあることを確認します。

2. バックアップを作成する
編集前のhttpd.confを、httpd.conf.bakなど別の名前でコピーします。Apacheが起動しなくなった場合に元へ戻せる場所へ保存してください。
3. テキストエディタで開く
httpd.confをVSCodeなどのテキストエディタで開きます。保存時に管理者権限を求められる環境では、権限を確認してから編集してください。
変更してはいけないDirectoryルート
httpd.confでAllowOverride Noneを検索すると、次のブロックが見つかる場合があります。
<Directory />
AllowOverride None
Require all denied
</Directory>

<Directory />は、Apacheのドキュメントルートではなく、ファイルシステムのルートを表します。このAllowOverride Noneは、許可していない場所の.htaccessをApacheが探索・適用しないための安全設定です。
Apache公式のAllowOverride資料には、セキュリティと性能上の理由から、<Directory "/">でNone以外を設定せず、実際に.htaccessを置くディレクトリのブロックを探すか新しく作成するよう明記されています。
したがって、次の変更は行いません。
# 悪い設定例:ファイルシステム全体を対象にしない
<Directory />
AllowOverride All
Require all denied
</Directory>
また、Require all deniedも変更しません。

対象ディレクトリへAllowOverrideを設定する
1. DocumentRootを確認する
httpd.conf内でDocumentRootを検索し、Webコンテンツを公開しているフォルダーを確認します。XAMPPをC:\xamppへ導入した一般的な環境では、次のように設定されています。
DocumentRoot "C:/xampp/htdocs"
<Directory "C:/xampp/htdocs">
# このブロック内の設定を確認する
</Directory>
Windowsのエクスプローラーではバックスラッシュを使いますが、Apache設定内のパスは既存の表記に合わせてスラッシュで記述します。
2. 現在のAllowOverrideを確認する
<Directory "C:/xampp/htdocs">ブロック内に、すでにAllowOverride Allがある場合は変更不要です。XAMPPのバージョンや既存設定によって内容が異なるため、「初期状態では必ず無効」とは限りません。
対象ブロックがAllowOverride Noneで、URLリライトだけを使用する場合は、次のように変更します。
<Directory "C:/xampp/htdocs">
Options Indexes FollowSymLinks Includes ExecCGI
AllowOverride FileInfo
Require all granted
</Directory>
3. 特定のサイトだけ許可する
複数のサイトをhtdocs配下に置いている場合は、必要なサイトだけを対象にしたブロックを追加すると影響範囲を限定できます。
<Directory "C:/xampp/htdocs/example-site">
AllowOverride FileInfo
Require all granted
</Directory>
CMSの仕様上、複数種類の上書きが必要であることを確認できた場合だけ、対象サイトのブロックを次のようにします。
<Directory "C:/xampp/htdocs/example-site">
AllowOverride All
Require all granted
</Directory>
Allへ変更する前に、使用するCMSやアプリの公式要件を確認してください。
Apacheの構文を確認して再起動する
httpd.confを保存したら、Apacheを再起動する前に構文を確認します。コマンドプロンプトまたはPowerShellで次を実行します。
cd C:\xampp\apache\bin
.\httpd.exe -t次のように表示されれば、設定ファイルの構文は正常です。
Syntax OK
エラーが表示された場合はApacheを再起動せず、メッセージに示されたファイルと行を修正します。解消できない場合は、バックアップしたhttpd.confへ戻します。
構文確認後、XAMPP Control PanelでApacheの「Stop」→「Start」を実行します。httpd.confの変更はApacheの再起動後に反映されます。
.htaccessの動作を確認する
URLリライトを確認する場合は、対象サイトの.htaccessへ実際に使用するルールを配置し、期待したURLでページが表示されるか確認します。
RewriteRuleが反映されない場合は、httpd.confでrewrite_moduleが読み込まれているか確認します。
LoadModule rewrite_module modules/mod_rewrite.so
行頭に#が付いている場合はコメントアウトされています。ただし、モジュールを有効化する前に、使用しているApacheの構成とアプリの要件を確認してください。
.htaccessはリクエストごとに読み込まれるため、.htaccess自体を変更した場合は通常Apacheの再起動は不要です。一方、httpd.confやモジュール設定を変更した場合は再起動が必要です。
エラーが発生した場合の確認項目
.htaccessが反映されない
- 設定した
<Directory>のパスと.htaccessの配置場所が一致しているか - 親またはより具体的な
<Directory>ブロックで別の値が設定されていないか - URLリライトの場合、
AllowOverride FileInfo以上が許可されているか mod_rewriteが読み込まれているかhttpd.conf変更後にApacheを再起動したか
500 Internal Server Errorになる
.htaccessの構文エラー、使用を許可されていないディレクティブ、必要なモジュールの未読み込みなどが考えられます。XAMPPの一般的な環境では、次のログを確認します。
C:\xampp\apache\logs\error.log
Invalid command、not allowed here、Options FollowSymLinks or SymLinksIfOwnerMatch is offなど、表示されたメッセージに対応する設定を確認してください。
Apacheが起動しない
まず.\httpd.exe -tで構文エラーを確認します。編集直後から起動しなくなった場合は、変更箇所を戻すか、作成したバックアップからhttpd.confを復元します。
参考資料
- AllowOverrideディレクティブ(Apache HTTP Server)
- .htaccessでのURL書き換えの前提条件(Apache HTTP Server)
- Apache設定ファイルと.htaccess
- Apacheのセキュリティに関するヒント
まとめ
| 項目 | 推奨設定 |
|---|---|
<Directory /> | AllowOverride Noneのまま変更しない |
| URLリライトを使うサイト | 対象ディレクトリへAllowOverride FileInfo |
| 複数種類の上書きが必要なサイト | 対象ディレクトリに限定してAllowOverride All |
| 構文確認 | C:\xampp\apache\bin\httpd.exe -t |
| 設定反映 | XAMPP Control PanelでApacheを再起動 |
| エラー確認 | C:\xampp\apache\logs\error.log |
AllowOverride Allは.htaccessへ広い権限を与える設定です。検索で最初に見つかった<Directory />を変更するのではなく、実際にサイトを置くディレクトリへ必要な種類だけを許可してください。URLリライトだけであれば、通常はAllowOverride FileInfoで対応できます。