我需要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?
答案 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>
容器。