Все заголовки относятся исключительно к своему ответу. После получения редиректа барузер сгенерирует новый отдельный запрос к ресурсу /my/file.svg и сервер вместе с ним вернёт свои заголовки, относящиеся только к этому ресурсу и в этих заголовках кеширующей директивы не будет.
Так что в вашем случае будет закеширован редирект. То есть браузер запомнит что урл "file.php?path=/my/file.svg" редиректится на "/my/file.svg" (в принципе, он это запомнит и без дополнительного Cache-Control) и если встретит где-то на странице первый урл, то отправит запрос сразу на второй урл, минуя запрос на первый.
Вам нужно отдавать контент картинки непосредственно самим скриптом:
header('Content-Type: image/svg+xml');
// public явным образом разрешает кешировать контент не только на
// устройстве пользователя, но и на любом промежуточном кеширующем http сервере,
// если такой будет стоять между вами и пользователем
// например, провайдерский или в офисах
header('Cache-Control: public, max-age=604800');
// ОСТОРОЖНО!!! Сначала произведите валидацию
// параметра path перед передачей его в readfile()!
readfile($_GET['path']);
Это не должно быть напряжно по ресурсам. Всё-таки кешируется на неделю.