如何通过“files”指令在子目录中选择文件?

时间:2011-11-03 16:47:03

标签: apache file .htaccess

我想在特定的.htm文件中编译PHP代码,如果文件位于域的根目录我可以添加

<Files file.htm>
    AddType application/x-httpd-php5 .htm
</Files>

到.htaccess,但如果文件位于另一个目录(例如/sub/file.htm),该怎么办?

3 个答案:

答案 0 :(得分:1)

如果你使用的是<if>支持

的httpd 2.4,也许可以做到
<If "%{PATH_INFO} =~ /.*\/sub\/(file|anotherfile|andanother)\.htm/">
   AddType application/x-httpd-php5 .htm
</If>

答案 1 :(得分:0)

尝试使用FilesMatch:

<FilesMatch "file.htm$">
    AddType ...
</Files>

它将正则表达式应用于文件名,因此这将匹配最后具有“file.htm”的任何文件路径。它适用于以“file.html”结尾的任何目录中的任何文件。请注意,这也将匹配“somefile.htm”和“/subdir/somefile.htm”。如果您的站点树中有其他文件可以触发此操作,则必须修改正则表达式以排除它们。

答案 2 :(得分:0)

也许您想使用httpd.conf而不是.htaccess文件。在这种情况下,您可以使用<Location>-directive

<Location /sub/file.htm>
   AddType application/x-httpd-php5 .htm
</Location>

请注意,如果您想使用正则表达式匹配您需要在该位置前写~的位置,或使用<LocationMatch>-directive

E.g:

<Location ~ "/sub/(file|anotherfile|andanother).htm">
   AddType application/x-httpd-php5 .htm
</Location>

修改

另一种可能的解决方案(也仅在virtualhost-config中)应该是一个合并的<Directory><Files> - 指令:

<Directory /sub>
  <Files file.htm>
    AddType application/x-httpd-php5 .htm
  </Files>
</Directory>