JA
/
EN

ApacheでAllowOverrideを設定する方法|.htaccessを有効化

  • 開発環境
  • .htaccess
  • Windows

.htaccessが反映されない場合、httpd.confAllowOverrideを確認します。ただし、検索で最初に見つかる<Directory />AllowOverride NoneAllへ変更してはいけません。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書き換えで使用するRewriteEngineRewriteCondRewriteRuleFileInfoに含まれます。そのため、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.confAllowOverride 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.confrewrite_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 commandnot allowed hereOptions FollowSymLinks or SymLinksIfOwnerMatch is offなど、表示されたメッセージに対応する設定を確認してください。

Apacheが起動しない

まず.\httpd.exe -tで構文エラーを確認します。編集直後から起動しなくなった場合は、変更箇所を戻すか、作成したバックアップからhttpd.confを復元します。

 

参考資料

 

まとめ

項目推奨設定
<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で対応できます。

記事を共有する