Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/security/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Apache 修改working AddHandler以仅匹配当前目录中的文件,而不是子目录中的文件_Apache_Security_Apache2.4_Addhandler - Fatal编程技术网

Apache 修改working AddHandler以仅匹配当前目录中的文件,而不是子目录中的文件

Apache 修改working AddHandler以仅匹配当前目录中的文件,而不是子目录中的文件,apache,security,apache2.4,addhandler,Apache,Security,Apache2.4,Addhandler,允许在两个XML文件上执行PHP,以下操作非常有效: <FilesMatch ^(opensearch|sitemap)\.xml$> AddHandler application/x-httpd-php5 .xml </FilesMatch> AddHandler应用程序/x-httpd-php5.xml 然而不幸的是,这条规则也允许在任何子目录中发生这种情况 /opensearch.xml,工作/所需匹配 /henchman24/opensearch.xml,

允许在两个XML文件上执行PHP,以下操作非常有效:

<FilesMatch ^(opensearch|sitemap)\.xml$>
AddHandler application/x-httpd-php5 .xml
</FilesMatch>

AddHandler应用程序/x-httpd-php5.xml
然而不幸的是,这条规则也允许在任何子目录中发生这种情况

  • /opensearch.xml,工作/所需匹配
  • /henchman24/opensearch.xml,正在工作/所需匹配
我们如何强制Apache只匹配当前目录中的文件而不匹配子目录中的文件

我真的很想:

  • 避免在每个可能的子目录中添加子
    .htaccess
    文件
  • 避免使用绝对服务器路径
可用于为仅为与当前文件夹中的模式匹配的文件添加的处理程序提供

以下示例将仅为文档根目录中的文件添加处理程序,例如
/sitemap.xml
/opensearch.xml
,但不为
/folder/sitemap.xml
/folder/opensearch.xml

<FilesMatch ^(opensearch|sitemap)\.xml$>
<If "%{REQUEST_URI} =~ m#^\/(opensearch|sitemap)\.xml$#">
  AddHandler application/x-httpd-php .xml
</If>
</FilesMatch>
^                      # startwith
\/                     # escaped forward-slash
(opensearch|sitemap)   # "opensearch" or "sitemap"
\.                     # .
xml                    # xml
$                      # endwith

您是否在规则中尝试过H=

RewriteEngine On
RewriteRule ^(opensearch|sitemap)\.xml$ . [H=application/x-httpd-php5]

htaccess中的Rewrite具有内置属性,即任何子目录中的文件名都将在正则表达式测试所针对的字符串中显示子目录,因此锚定正则表达式在子目录中不匹配。

很有趣,尽管它损坏了
。htaccess
文件,我不得不将其删除,我不确定该文件有什么问题
Directory
bit?也许这在Apache2.2中可以工作?我正在使用Apache2.4。我知道语法的工作方式有一些变化。我应该从一开始就澄清Apache版本,我的道歉。@covener。本示例中使用的模式基于OP问题中的共享配置。如果必须匹配特定目录,则需要在pattern@John.htaccess文件的上下文中不支持
目录
指令。您是否考虑过使用
If
指令来限制在包含.htaccess文件的文件夹上设置处理程序?它成功了!接受并投票赞成。我在不同的目录中测试了同一文件的另一个副本。能否请您澄清一下,如果条件具体起了什么作用?不幸的是,这不是我们可以实施SUPPP的地方。可能需要一两年的时间,但最终我可能会发现这是正确的答案。由于它无法测试,我很遗憾至少还不能投票。我不知道答案与SUPPP有什么关系,除非你的目标也隐含了SUPPP。“不受支持”是使用此规则后出现的Apache错误消息。经进一步调查,这似乎与PHP有关(cgi与SUPPP)。但我不知道为什么,这不是我的专业领域。您可以尝试将FileMatch中的正则表达式更改为仅匹配根目录: