У меня есть следующий конфигурационный файл .htaccess для перенаправления пользователя в кэшированную версию ответа API:
RewriteCond %{REQUEST_METHOD} GET
RewriteRule ^(.*)?/$ - [E=URL:$1]
RewriteCond %{DOCUMENT_ROOT}/cache/%{ENV:URL}.json -f
RewriteRule ^(.*) %{DOCUMENT_ROOT}/cache/%{ENV:URL}.json [L]
Переменная окружения URL
установлена для учета конечной косой черты, которая может существовать или не существовать. Эта часть отлично работает и делает то, что должна.
Однако, поскольку запросы выполняются через AJAX-вызовы, мы должны установить заголовки CORS для этих случаев. Важно, чтобы эти заголовки НЕ устанавливались, если нет кэшированного ответа.
Я пробовал следующие вещи, но ничего не получалось.
Использование блока If
:
RewriteCond %{REQUEST_METHOD} GET
RewriteRule ^(.*)?/$ - [E=URL:$1] [PC]
<If "-f '%{DOCUMENT_ROOT}/cache/%{ENV:URL}.json'">
Header set Access-Control-Allow-Origin "*"
Header set Access-Control-Allow-Headers "Content-Type,Accept"
Header set Access-Control-Allow-Methods "GET,POST,PUT,DELETE,OPTIONS"
Header set Access-Control-Expose-Headers "Content-Type,Content-Length"
</If>
Использование setEnvIfExpr
:
RewriteCond %{REQUEST_METHOD} GET
RewriteRule ^(.*)?/$ - [E=URL:$1] [PC]
setEnvIfExpr "-f '%{DOCUMENT_ROOT}/cache/${ENV:URL}.json'" USE_CACHE
Header set Access-Control-Allow-Origin "*" env=USE_CACHE
Header set Access-Control-Allow-Headers "Content-Type,Accept" env=USE_CACHE
Header set Access-Control-Allow-Methods "GET,POST,PUT,DELETE,OPTIONS" env=USE_CACHE
Header set Access-Control-Expose-Headers "Content-Type,Content-Length" env=USE_CACHE
Обратите внимание, что в обоих случаях, если я заменю %{ENV:URL}
существующим жестко закодированным файлом, заголовки будут установлены, как и ожидалось в последнем примере.
По какой-то причине %{ENV:URL}
недоступно в этих условных выражениях?
Я пробовал так много вещей, и ни одна из них, казалось, не работала для чего-то такого тривиального.
Пожалуйста, помогите!
Заранее спасибо!