web-dev-qa-db-ja.com

ubuntu 14.04 Apache 2.4.7mpm_eventファイルとFilesMatchが機能しない

最近、Apache2.4.7モードをmpm_pre-forkからmpm_eventに切り替えました。それ以来、Filesディレクティブを機能させることができませんでした。

<Files "*.php">
  Header set Cache-Control "no-cache, no-store, must-revalidate, max-age=0"
</Files>

私はなんとかこの複雑な混乱に取り組むことができました:

<Files ~ "((^$)|(php))">

しかし、私の正規表現の知識によれば、これはファイル名のどこかに「php」が付いているファイルと一致します。 この他の質問 から「null」の場合に一致する必要があることがわかりました。 FilesMatchも試しましたが、同じ結果になりました。

これは、Apache2.4のドキュメントからわかることからは意味がありません。他の誰かがこの問題のようなものを見たことがありますか?

[〜#〜] update [〜#〜]:サーバーを変更せずにmpm_preforkerとmod_phpにロールバックしました。次に、Apacheとphpを削除し、mpm_preforkerとして再インストールすると、再び機能しました。次に、mpm_eventとphp-fpmにアップグレードしましたが、しばらくすると機能しなくなりました。私はそれが壊れている場所を特定しようとしています、そして私が見つけたものを投稿します。

UPDATE2:これはfastcgiまたはphp-fpmのものに関連しているようです。 2つの<Files>ディレクティブがあります。1つはhtml用で、もう1つはphp用で一意のヘッダーを生成します。

<Files *.html>
   Header always set X-Aaron-files "html match"
</Files>
<Files *.php>
   Header always set X-Aaron-files "php match"
</Files>

架空のphpファイルに移動すると、php-matchのヘッダーが付いた404メッセージが表示されます。しかし、実際のphpファイルに移動すると、サーバーはphpファイルを実行しますが、phpファイルの一致を示すヘッダーを返しません。

3
Aaron

これは、fastcgiとphp-fpmのものに関連しているようです。
これがどのようにテストを通過したのかわからない...

要求されたファイルisがphp-fpmによって処理される場合、ディレクティブではない処理されます。

代わりに、ファイルない php-fpm(欠落しているphpファイルに対する404応答を含む)によって処理される場合、ディレクティブあります処理されます。

0
Aaron

<Files "*.php">動作します

リダイレクトページなど、ヘッダー以外のことを試してください。

<Files "*.php">
redirect 301 / /anyPage.htm
</Files>

正規表現で同じことをしたい場合は、

<Files ~ "\.php">
redirect 301 / /anyPage.htm
</Files>

あなたが何もそしてどんなphpページにもマッチさせたいならば:

<Files ~ "(^$|\.php)">
redirect 301 / /anyPage.htm
</Files>

Filematchの使用:

<FilesMatch "(^$|\.php)">
    redirect 301 / /anyPage.htm
</FilesMatch>

あなたはそれが機能するテストをすることができます。

ヘッダーを上書きする命令がどこかにあると思います

1
Froggiz