I';我无法缓存我的PHP重写的CSS文件

I';我无法缓存我的PHP重写的CSS文件,php,Php,我有一个php文件,它在htaccess中被重命名为css文件。原因是,因为我有一些风格和颜色的变化,根据一些管理选项 无论如何,我正在尝试允许访问者的浏览器缓存文件。以下是我所拥有的: style.php: header("Content-type: text/css; charset: UTF-8"); // Start normal CSS styles... .htaccess: RewriteRule ^assets/css/min/([a-zA-Z0-9\._-]+)/([a-z

我有一个php文件,它在htaccess中被重命名为css文件。原因是,因为我有一些风格和颜色的变化,根据一些管理选项

无论如何,我正在尝试允许访问者的浏览器缓存文件。以下是我所拥有的:

style.php:

header("Content-type: text/css; charset: UTF-8");

// Start normal CSS styles...
.htaccess:

RewriteRule ^assets/css/min/([a-zA-Z0-9\._-]+)/([a-zA-Z0-9\._-]+)/([a-zA-Z0-9\._-]+)\.css$ assets/css/min.php?style=$1&layout=$2&ver=$3 [L,QSA]

# Compress
AddOutputFilterByType DEFLATE text/css

# Cache for 1 week
<FilesMatch ".(css)$">
Header set Cache-Control "max-age=604800"
</FilesMatch>

<IfModule mod_expires.c>
    ExpiresActive on
    ExpiresByType text/css "access plus 1 week"

</IfModule>

您的mod_expires配置根据Web服务器感知的mimetype应用于文件。除非您在其他地方对Web服务器配置进行了一些重大操作,否则Web服务器不会将text/CSS mimetype与以.php结尾的文件相关联(如果这样做了,则需要进一步的黑客攻击才能让php解析器处理这些文件)。PHP脚本设置的头与此过程无关

虽然可以强制mod_expires将缓存头添加到响应中,但您还必须使用mod_头来删除PHP设置的值;当浏览器收到多个冲突的缓存指令时,它将使用其中表示的最短到期时间

因此,要使内容可缓存,应该直接从PHP脚本发出缓存信息。例如

header('Cache-control: max-age=604800; private');

但基于访问时间的过期时间并不是最好的解决方案。

我猜这与以下事实有关(在内部,一旦重写),URL有一个查询字符串,因此不会被缓存,尽管Apache 2.4的文档通常表示,对于每个唯一的查询字符串,分别缓存具有查询字符串参数的请求。这是根据RFC 2616/13.9进行的,只有在指定了过期时间时才执行。&您似乎正在设置过期时间-mod_expires是否已明确启用?@RobGudgeon是的,mod_expires已启用,因为它适用于我拥有的某些其他类型的文件(图像)。您的“access plus 1周”是否触发了standard,未重写的CSS文件?从标题看,这一行看起来也很奇怪:
Content-Type:text/CSS;字符集:UTF-8;charset=UTF-8
-尝试删除您的
;charset:UTF-8
来自php脚本的标题-我想知道这是否会在尝试检测内容时绊倒Apache-type@RobGudgeon谢谢你的建议。我从脚本头中删除了
charset:UTF-8
,并删除了头中的重复字符集。此外,我还尝试了一个未重写的CSS文件,它会缓存这些文件,只是没有缓存这个重写的文件。我尝试将其添加到PHP脚本中,因为接收到的头没有变化,文件仍然没有缓存。然后您没有设置正确的头。用PHP代码和你得到的标题发布一个新问题。我刚刚意识到如果我添加了
header('Pragma:cache')
,文件缓存很好。我不知道头从哪里来,但这就是阻止它缓存的原因。在哪个浏览器中?规范中哪里提到“pragma”作为响应头,更不用说定义它的操作了?我使用的是Firefox。我不知道那个头球是从哪里来的。
Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0
Connection: Keep-Alive
Content-Encoding: gzip
Content-Length: 13881
Content-Type: text/css; charset: UTF-8;charset=UTF-8
Date: Sat, 20 Feb 2016 22:49:17 GMT
Expires: Thu, 19 Nov 1981 08:52:00 GMT
Keep-Alive: timeout=5, max=94
Pragma: no-cache
Server: Apache/2.4.16 (Unix) OpenSSL/1.0.1p PHP/5.6.12 mod_perl/2.0.8-dev Perl/v5.16.3
Vary: Accept-Encoding,User-Agent
X-Powered-By: PHP/5.6.12
header('Cache-control: max-age=604800; private');