我正在为面向Tomcat服务器的Apache服务器设置一些Apache(httpd)配置,如下所示:
<Proxy *>
Order deny,allow
Allow from all
AllowOverride All
</Proxy>
<IfModule mod_rewrite.c>
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.+)\.v(\d+)\.(js|css|png|jpe?g|gif)$ $1.$3 [L]
</IfModule>
ProxyPass / http://localhost:8080/ retry=0
ProxyPassReverse / http://localhost:8080/
ProxyPreserveHost on
<Files "*.html">
Header set Cache-Control "public, max-age=900"
</Files>
我安装了重写模块和标头模块。 mod_rewrite规则就在那里,以便我可以对静态资源进行版本控制,例如: style.v2.css
将转换为style.css
等。自定义标头是为了避免浏览器对html文件进行积极缓存。
代理指令将请求传递到侦听端口8080的Tomcat服务器上。但重写规则不起作用。我为style.v2.css得到了404,因为它没有将文件名转换为style.css。
自定义标头也不会被应用,但仅仅因为<Files>
指令与我的html文件不匹配。如果我删除<Files>
指令并将自定义标头应用于所有文件,那么它们都会在其响应中获得该标头。
我不确定如何调试它。这种配置有什么明显的错误吗?
我忘了包含RewriteEngine On
以使重写规则有效。现在我已经添加了它。即使我正在请求html文件,<Files>
匹配仍然无效。
另外,使用:
<Files "myfile.html">
Header set Cache-Control "public, max-age=900"
</Files>
...当我专门针对myfile.html
提出请求时,仍然无效。顺便说一句,此配置位于<VirtualHost _default_:443>
内。
我也尝试将<Files>
指令放在<Directory>
指令中,但它仍然不起作用:
<Directory "/var/www">
<Files "*.html">
Header set Cache-Control "public, max-age=600"
</Files>
</Directory>