【发布时间】:2019-04-08 18:26:48
【问题描述】:
我有以下 .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} 在这些条件表达式中不可用?
我一直在尝试很多东西,但似乎没有一个对这种微不足道的事情有用。
请帮忙!
提前致谢!
【问题讨论】:
标签: apache .htaccess http-headers