2

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

  <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 modules/mod_filter.so
LoadModule headers_module modules/ mod_headers.so
# LoadModule heartbeat_module modules/mod_heartbeat.so
...

是否有任何调试日志来找出哪些模组已经加载,哪些没有?

4

1 回答 1

1

您需要检查mod_headers.c模块:

<IfModule mod_headers.c>

(请参阅有关 .so/.c 内容的答案)

但是您收到 500 错误的原因是双重的。

首先,<FilesMatch>容器需要一个正则表达式,而“*.gif”不是一个有效的正则表达式。您可能只想使用<Files>容器。

其次,<If>在 apache 2.2 中不可用,只有 2.4 版。如果您不使用 apache 2.4,那么您将无法使用该<If>容器。

于 2014-01-23T00:47:48.773 回答