我们有一个 apache conf,定义了一堆环境变量,如下所示:/etc/apache2/conf-enabled/env.conf
SetEnv AWS_BUCKET "MY BUCKET"
我想在重写中使用该变量 AWS_BUCKET,如下所示:
RewriteRule ^wp-content/uploads/(.*)$ https://s3.amazonaws.com/%{ENV:AS3CF_BUCKET}/wp-content/uploads/$1 [P]
此存储桶会根据我们所处的服务器环境而变化,即 prod、staging、dev 和 local。
这不起作用。我读到 SetEnv 在这些重写之后被调用,所以我应该使用 SetEnvIf 来设置变量。但是,使用 SetEnvIf 仍然不起作用,因为不仅无法检查是否设置了 AWS_BUCKET,而且我仍然无法读取变量,因为直到重写和 SetEnvIf 被调用后才设置。
SetEnvIf 还要求在 htaccess 文件中设置所需的变量,而我无法做到这一点,因为这样做的目的是提供特定于动态环境的解决方案。
有没有办法使用 conf 文件中设置的变量,或者是否需要将该变量设置为系统范围变量?
编辑 - 遗憾的是,我无法添加或修改 apache 配置。该服务器由另一个部门运行,该部门在构建和部署过程中使用提供的变量将该文件作为模板注入。
因此,我必须使用我有权访问的内容,即 Web 应用程序和 htaccess 文件。我不确定他们是否会为我对该流程进行任何更改。
答案1
由于指令的处理方式,这仅在使用SetEnvIf
而不是 时才有效SetEnv
。因此需要使用类似以下方式进行设置:
SetEnvIf Request_URI ^ AWS_BUCKET="我的存储桶"