Мне нужно удалить все кеширование, когда на моем веб-сайте вызывается определенный путь (/ foo / bar /). Моя поддержка управляемого хостинга говорит мне, что я должен сделать это в .htaccess, и я попытался использовать директиву Location, например:
<Location "/foo/bar/">
Header set Cache-Control "max-age=0, no-cache, no-store, must-revalidate"
</Location>
Но все, что я получаю, это внутренняя ошибка сервера. Я что-то пропустил или эту директиву нужно поместить в определенное место в .htaccess? Я перепробовал все, что мог, с тем же результатом.
Как уже было сказано, <Location>
директива не разрешена в .htaccess
файлы. Если /foo/bar/
относится непосредственно к каталогу файловой системы, тогда вы можете разместить .htaccess
файл в этом каталоге, чтобы применить директивы (Header
в данном случае) только в этот каталог и ниже.
Однако если /foo/bar/
является только URL-путем (что также является <Location>
цели директивы в контексте сервера), который не имеет прямого отношения к файловой системе, то вместо этого вы можете установить переменную среды при доступе к этому URl-пути и установить Header
условно в зависимости от того, установлен ли этот env var.
Например:
SetEnvIf Request_URI "^/foo/bar/$" NO_CACHE
Header set Cache-Control "max-age=0, no-cache, no-store, must-revalidate" env=NO_CACHE
Вышеуказанное устанавливает env var NO_CACHE
(к значению 1
) когда URL-путь /foo/bar/
(только) запрашивается и Header
тогда директива применяется только тогда, когда этот env var установлен (последним аргументом env=NO_CACHE
).
В качестве альтернативы, если вы используете Apache 2.4+, вы можете использовать Apache <If>
выражения для прямого таргетинга только на этот URL-путь, исключая необходимость установки env var. Например:
<If "%{REQUEST_URI} =~ m#^/foo/bar/$#">
Header set Cache-Control "max-age=0, no-cache, no-store, must-revalidate"
</If>
Другая альтернатива, если вы используете Apache 2.4.10+, вы можете использовать Выражение Apache прямо в Header
директива, чтобы настроить таргетинг только на этот URL-путь. Например:
Header set Cache-Control "max-age=0, no-cache, no-store, must-revalidate" "expr=%{REQUEST_URI} =~ m#^/foo/bar/$#"
Согласно Документация Apache, то Location
директива не может использоваться в .htaccess
файл вообще. Ты можешь использовать Location
в конфигурации сервера, но .htaccess
file всегда ссылается на текущий каталог, в котором находится файл, поэтому указывать директивы для другого места в этом файле бессмысленно.
Просто оставьте Location
директива вне, Header
сам должен работать для этого каталога / местоположения.