gpt4 book ai didi

apache - 手动替代 mod_deflate

转载 作者:行者123 更新时间:2023-12-01 00:03:34 25 4
gpt4 key购买 nike

假设我没有将 mod_deflate 编译成 apache,而且我现在不想重新编译。手动方法的缺点是什么,例如就像是:

AddEncoding x-gzip .gz
RewriteCond %{HTTP_ACCEPT_ENCODING} gzip
RewriteRule ^/css/styles.css$ /css/styles.css.gz

(注意:我知道需要调整 RewriteCond 的细节 稍微 )

最佳答案

另一种选择是将所有内容转发到 PHP 脚本,该脚本会动态压缩和缓存所有内容。对于每个请求,它会将时间戳与缓存版本进行比较,如果它比源文件更新,则返回该版本。使用 PHP,您还可以覆盖 HTTP header ,因此它会被正确处理,就好像它是由 Apache 本身进行 GZIP 处理一样。

像这样的事情可能适合你:

.htaccess

RewriteEngine On
RewriteRule ^(css/styles.css)$ cache.php?file=$1 [L]

缓存.php:
<?php
// Convert path to a local file path (may need to be tweaked)
cache($_GET['file']);

// Return cached or raw file (autodetect)
function cache($file)
{
// Regenerate cache if the source file is newer
if (!is_file($file.'.gz') or filemtime($file.'.gz') < filemtime($file)) {
write_cache($file);
}

// If the client supports GZIP, send compressed data
if (!empty($_SERVER['HTTP_ACCEPT_ENCODING']) and strpos($_SERVER['HTTP_ACCEPT_ENCODING'], 'gzip') !== false) {
header('Content-Encoding: gzip');
readfile($file.'.gz');
} else { // Fallback to static file
readfile($file);
}
exit;
}

// Saved GZIPed version of the file
function write_cache($file)
{
copy($file, 'compress.zlib://'.$file.'.gz');
}

您将需要 apache 的写入权限才能生成缓存版本。您可以稍微修改脚本以将缓存文件存储在不同的位置。

这还没有经过广泛的测试,可能需要根据您的需要稍作修改,但这个想法就在那里,应该足以让您入门。

关于apache - 手动替代 mod_deflate,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2403396/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com