最近更新したウェブサイトのプラグインを使用しています。更新したので、プラグインのmagnalister.phpを開くと、常にアクセス拒否メッセージ(エラー403)が表示されます。新しい.htaccessファイルを古いファイルに置き換えても問題はありません。ファイルの内容は次のとおりです。
更新する前に:
<Files magnalister.php>
Order Deny,Allow
Allow from all
</Files>
<Files magnaCallback.php>
Order Deny,Allow
Allow from all
</Files>
更新後:
<Files magnalister.php>
<IfModule !mod_authz_core.c>
Order Deny,Allow
Allow from all
</IfModule>
<IfModule mod_authz_core.c>
Require all granted
</IfModule>
</Files>
<Files magnaCallback.php>
<IfModule !mod_authz_core.c>
Order Deny,Allow
Allow from all
</IfModule>
<IfModule mod_authz_core.c>
Require all granted
</IfModule>
</Files>
PHPエラーログで、次のようになります。
[Wed Sep 12 00:25:05 2018] [access_compat:error] [pid 7437] [client ***] [Host ***] AH01797: client denied by server configuration: /is/htdocs/***/www/testshop3/plugins/magnalister/magnalister.php
Apache /2.4.10を使用しています。
更新されたバージョンで403エラーが発生する理由は何ですか?
どこにアクセスを拒否しますか?それが問題のようです。 Apache構成の他の場所にある「古い」Apache2.2ディレクティブによるアクセスをまだ拒否していると思われますが、これが優先されています。
投稿したすべてのディレクティブはallowアクセスのみであるため、構成内の他の何かがそのファイルへのアクセスを拒否しています。
Apache2.4のmod_authz_core/Hostモジュールで動作するように.htaccess
構成を更新しました。ただし、Apache 2.4では、構成の別の部分がまだ古いDeny
ディレクティブ(Apache2.4のmod_access_compactおよびApache2.2のmod_authz_Hostの一部)を使用している場合、これらの「古い」ディレクティブは「新しい」ディレクティブよりも優先されます"設定の順序が明らかであるにもかかわらず、.htaccess
のApache2.4ディレクティブ、およびアクセスは引き続き拒否されます。
2.2から2.4へのアップグレード中のApacheドキュメント に記載されているように:
...古いディレクティブと新しいディレクティブを混在させると、予期しない結果が生じる可能性があります。 ... mod_access_compatディレクティブがmod_authz_Hostよりも優先されるため...
したがって、(アクセスを拒否するために)構成の他の場所で「古い」ディレクティブをまだ使用している場合は、同等のApache2.4ディレクティブを使用するようにこれらを更新する必要があります。
これは、Apache 2.4で予想されるように、mod_authz_coreではなくmod_access_compactによってトリガーされるエラーによって確認されているようです。
[2018年9月12日水曜日00:25:05] [access_compat:error] [pid 7437] [クライアント...] [ホスト...] AH01797:サーバー構成によってクライアントが拒否されました:/ is/htdocs /.../ www/testshop3/plugins/magnalister/magnalister.php
(脇:Apache 2.4を使用していると言います。.htaccess
で行っているように、Apache 2.2との下位互換性を維持する必要が本当にありますか?両方の構成を維持することは保守が難しくなり、エラーが発生しやすくなるだけです。)