我的重写规则是工作和redirect请求像/versioned/1234/images/foo.gif到/images/foo.gif,但它似乎并没有设置set_expires_header环境variables,因为标题不被追加。 如果我取消注释显式设置环境variables的行,则会设置标题。 我究竟做错了什么? 有一个更好的方法吗? 我希望能够使用这两个URL访问文件,但只有在通过版本化URL访问文件时才添加头文件。
<VirtualHost *:80> ServerName dev.example.com DocumentRoot /var/www/html/dev <Directory "/var/www/html/dev"> Options FollowSymLinks ExecCGI AllowOverride All Order allow,deny Allow from all SetEnvIf Request_URI versioned set_expires_header RewriteEngine on RewriteRule ^versioned/[^/\.]+/(.*)$ /$1 [E=set_expires_header:true,L] #SetEnv set_expires_header true Header append Expires "access plus 1 year" env=set_expires_header Header append Cache-Control "public" env=set_expires_header </Directory> </VirtualHost>
上述configuration不起作用的原因是Header行在RewriteRule之前被计算,因此环境variables总是为空。
解决scheme是将RewriteRule移动到<Directory>块之外,以便在Header行之前对其进行求值。
请参阅快速提供Javascript以获取更多详细信息
这是最后的工作configuration:
<VirtualHost *:80> ServerName dev.example.com DocumentRoot /var/www/html/dev RewriteEngine on RewriteRule ^versioned/[^/\.]+/(.*)$ /$1 [E=set_expires_header:true,L] <Directory "/var/www/html/dev"> Options FollowSymLinks ExecCGI AllowOverride All Order allow,deny Allow from all Header append Expires "Mon, 28 Jul 2014 23:30:00 GMT" env=set_expires_header Header append Cache-Control "public" env=set_expires_header </Directory> </VirtualHost>