В Apache ETag обрабатываются как основная функция . ETag вычисляется как хэш нескольких значений. Вы можете использовать директиву FileETag
в вашем файле httpd.conf
или .htaccess
, чтобы определить условное поведение для значений, которые нужно включить в хеш, но, как вы указали, ваши параметры ограничены:
INode
- номер i-узла вашего файла на конкретном сервере, с которого он обслуживается
MTime
- временная метка (в миллис) сервера, с которого ваш файл обслуживается
Size
- размер вашего файла в байтах
All
- все вышеперечисленное
None
- ничего из вышеперечисленного
Если вы хотите по-настоящему настраиваемое поколение 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
?>