mod_headers模块无法加载,尽管它在 httpd.conf 中已启用



我需要mod_headers根据获取参数强制下载文件。

  <FilesMatch "*.gif">
     <If "%{QUERY_STRING} =~ /dl/">
        #Download header
        Header set Content-Disposition "attachment"
     </If>
  </FilesMatch>

上面的代码会产生错误500。但是,如果我将其正确包装在<IfModule>中,它根本不做任何事情:

<IfModule mod_headers>
  <FilesMatch "*.gif">
     <If "%{QUERY_STRING} =~ /dl/">
        Header set Content-Disposition "attachment"
     </If>
  </FilesMatch>
</IfModule>

这让我认为mod_headers根本没有加载。但是我在httpd.conf中启用了它:

...
loadModule filter_module模块/mod_filter.so
loadModule headers_module模块/ mod_headers.so
# loadModule heartbeat_module模块/mod_heartbeat.so
...

是否有调试日志可以找出已加载的mod,什么没有加载?

您需要检查mod_headers.c模块:

<IfModule mod_headers.c>

(请参阅有关.so/.c Quitt的此答案)

但是您获得500错误的原因是双重的。

首先,<FilesMatch>容器期望正则表达式,"*.gif"不是有效的正则表达式。您可能只想使用<Files>容器。

第二,<If>在Apache 2.2中不可用,仅版本2.4。如果您不使用Apache 2.4,那么您将无法使用<If>容器。

最新更新