Bug 63145

Summary: <FilesMatch> not work inside <If> <ElseIf> <Else>
Product: Apache httpd-2 Reporter: roskoshinsky
Component: CoreAssignee: Apache HTTPD Bugs Mailing List <bugs>
Status: NEW ---    
Severity: normal    
Priority: P2    
Version: 2.4.37   
Target Milestone: ---   
Hardware: PC   
OS: Mac OS X 10.1   

Description roskoshinsky 2019-02-05 14:27:32 UTC
When I try to use <FilesMatch> inside <If> — the first one directive has not work.

<If "-f '/www/%{HTTP_HOST}/php70'">
   <FilesMatch \.php$>
      SetHandler "proxy:fcgi://127.0.0.1:9070"
   </FilesMatch>
</If>

This is working:

<If "-f '/www/%{HTTP_HOST}/php70'">
   Redirect / http://url/
</If>

and this one:

<FilesMatch \.php$>
   SetHandler "proxy:fcgi://127.0.0.1:9070"
</FilesMatch>
Comment 1 Luca Toscano 2019-02-17 16:32:05 UTC
Hi!

I verified this behavior, and I should be due to how sections are merged:

https://httpd.apache.org/docs/2.4/sections.html#merging

Files and FilesMatch are processed before the If blocks (in the map_to_storage core bits), so I think that when it comes to evaluate the <If> condition then the core will not be able to merge anything Files/Directory related, ending up in the result presented by your report.

Note that the following should work:

   <FilesMatch \.php$>
       <If "-f '/www/%{HTTP_HOST}/php70'">
          SetHandler "proxy:fcgi://127.0.0.1:9070"
       </If>
   </FilesMatch>

If my idea is true I am wondering if httpd should explicitly throw a configuration parse error when this kind of settings are applied by the user.