Назад | Перейти на главную страницу

Сервер Apache - пытается использовать директиву Location в .htaccess

Мне нужно удалить все кеширование, когда на моем веб-сайте вызывается определенный путь (/ 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 сам должен работать для этого каталога / местоположения.