我的重写规则正在工作并将 /versioned/1234/images/foo.gif 之类的请求重定向到 /images/foo.gif 但它似乎没有设置 set_expires_header 环境变量,因为没有附加标头。如果我取消注释显式设置环境变量的行,则设置标题。我究竟做错了什么?有一个更好的方法吗?我希望能够使用两个 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>
上述配置不起作用的原因是这些
Header
行是在 之前评估的RewriteRule
,因此环境变量始终为空。解决方案是移动块的
RewriteRule
外部,<Directory>
以便在行之前对其进行评估Header
。有关更多详细信息,请参阅快速提供 Javascript
这是最终的工作配置: