在Apache,ETags are handled as a core feature中.ETag被计算为多个值的散列.您可以在httpd.conf或.htaccess文件中使用FileETag指令来定义要包含在哈希中的值的条件行为,但正如您所指出的,您的选项仅限于:
> INode – 您提供的特定服务器上的文件的索引节点号
> MTime – 提供文件的服务器的时间戳(以毫秒为单位)
>大小 – 文件大小(以字节为单位)
>全部 – 以上全部
>无 – 以上都不是
如果你想要真正自定义ETag生成,那么你最好不要编写Apache模块.但是,如果您需要快速而肮脏的修复,则可以通过将请求路由到PHP脚本并在脚本中附加Etag标头来生成自己的标记.在httpd.conf或.htaccess文件中,路径可能如下所示:
RewriteCond %{REQUEST_FILENAME} \.png$ # This example looks for .png requests
RewriteRule ^(.*)$/gentag.PHP?path=$1 [B] # ...and routes them to a PHP script
PHP脚本可能如下所示:
$path = $_GET['path']; // Grab the filepath from GET params
$cont = file_get_contents($path); // Get file contents to hash
$hash = crc32($cont); // Create your own ETag hash however you like
header("Etag: $hash"); // Send the custom Etag header
echo $cont; // Dump the file contents to output
?>