我正在使用yii2的资产套装。但我没有找到影响每个文件的http标头(css和js)。例如,我想设置缓存。 对于控制器,我这样做:
'class' => 'yii\filters\HttpCache',
'only' => ['index', 'view'],
'cacheControlHeader' => 'public, max-age=3600',
'lastModified' => function ($action, $params) {
$q = new \yii\db\Query();
return $q->from('user')->max('updated_at');
},
但是如何为资产/资产包做这件事?
答案 0 :(得分:1)
你真的不能这样做。
您的CSS和JS文件由您的网络服务器提供(无论您使用哪一个)。资产和捆绑包是一种从Web服务器无法访问的文件夹(例如/assets/
)中获取文件的机制,并将它们放入Web服务器可访问的文件夹中,如/web/assets/xxxxxxx
,然后通过{{ {1}}。
文件直接提供,没有Yii的任何参与。因此,如果您需要特定的标头(用于缓存控制或任何其他原因),您的Web服务器配置就是应该完成的地方。
答案 1 :(得分:1)
将其放入.htaccess
文件夹中的web/
文件中,设置Expires
标题以缓存JS,CSS,图像等。
## EXPIRES CACHING ##
<IfModule mod_expires.c>
ExpiresActive On
ExpiresDefault "access plus 1 month"
#ExpiresByType image/jpg "access plus 1 year"
#ExpiresByType image/jpeg "access plus 1 year"
#ExpiresByType image/gif "access plus 1 year"
#ExpiresByType image/png "access plus 1 year"
#ExpiresByType text/css "access plus 1 month"
#ExpiresByType application/pdf "access plus 1 month"
#ExpiresByType application/javascript "access plus 1 month"
#ExpiresByType text/javascript "access plus 1 month"
#ExpiresByType text/x-javascript "access plus 1 month"
#ExpiresByType application/x-shockwave-flash "access plus 1 month"
#ExpiresByType image/x-icon "access plus 1 week"
</IfModule>
答案 2 :(得分:0)
class PostController extends Controller
{
public function behaviors()
{
return [
[
'class' => 'yii\filters\PageCache',
'only' => ['view', 'short'], // actions
'duration' => 60,
'enabled' => !YII_DEBUG,
'variations' => [
HTTPS_ON,
$_SERVER['SERVER_NAME'],
]
]
];
}
...
或记录此网址https://www.yiiframework.com/doc/api/2.0/yii-filters-pagecache