虽然在httpd.conf中启用了mod_headers模块但它没有加载

时间:2014-01-22 22:53:09

标签: apache .htaccess mod-headers

我需要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
  ......

是否有任何调试日志可以找出已加载的mod以及未加载的mod?

1 个答案:

答案 0 :(得分:1)

您需要检查mod_headers.c模块:

<IfModule mod_headers.c>

(请参阅this answer关于.so / .c的内容)

但是你得到500错误的原因是双重的。

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

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