Apache / Httpd mod_rewrite和Files指令不起作用

时间:2015-09-04 15:20:43

标签: apache mod-rewrite webserver

我正在为面向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>

0 个答案:

没有答案