2016-12-27 4 views
2


Apache 2.4.6(CentOS 7リポジトリからの最新バージョン)処理用のすべてのPHPファイルを特別にコンパイルされたPHPに渡そうとしていますWebサイトのルートに「php7.enable」ファイルが存在する場合は、-FPMを指定します。%{DOCUMENT_ROOT}変数がApache 2.4のIf文内にあります

私がしようとすると、この:

<If "-f %{DOCUMENT_ROOT} . '/php7.enable'"> 
RewriteEngine On 
RewriteRule "^/(.*\.php(/.*)?)$" "fcgi://127.0.0.1:9000/%{DOCUMENT_ROOT}/$1" [P] 
</If> 

条件は動作しますが、のRewriteRule行に%{DOCUMENT_ROOT}は変数の値に展開されていませんが、毎回空です。奇妙なことに、 "If"ブロックの外側では、拡張が機能します。 誰もがなぜ、どのように動作させるか考えていますか?おかげさまで

+0

構文の私の理解から、私は '' <もし「-f 『%{DOCUMENT_ROOT} /php7.enable』」>などの条件を書かHVEう – symcbean

+0

If文自体は問題ではありません。問題は可変展開です。 Btw。私とあなたの両方の構文が働きます。 ;-) – online

+0

多分私の問題の解明が十分ではない、動作していない拡張はRewriteRule行にあるかもしれません。 IF条件自体は完全に動作しています。 – online

答えて

0

私は私の問題の解決策である回避策を見つけた:

<FilesMatch "\.php$"> 
Require all granted 
<If "-f '%{DOCUMENT_ROOT}/php7.enable'"> 
    SetHandler proxy:fcgi://127.0.0.1:9001 
</If> 
</FilesMatch> 

ので、私はまったくDOCUMENT_ROOT値を必要としない、それが完璧に動作します。 "php7.enable"ファイルをウェブサイトのDOCUMENT_ROOTに置くと、すべてのPHPファイルがPHP-FPM(PHP7を実行中)によって解釈されています。そのようなファイルがDOCUMENT_ROOTに見つからない場合、ApacheハンドラはPHPが(OS組み込みの)PHP5によって解釈させるために使用されます。

すべてのアイデアをお寄せいただきありがとうございます。これは、問題の根本的な原因を調べるのに役立ちました(設定ファイルのVirtualDocumentRootを使用すると、DOCUMENT_ROOTが正しく埋め込まれていない可能性があります)。

また、この質問で見ることができます - Mass virtual hosting with Apache 2.4

関連する問題