【问题标题】:SetEnv inherit from Host htaccessSetEnv 继承自 Host htaccess
【发布时间】:2016-10-06 16:07:49
【问题描述】:

使用我的 htaccess 文件,我正在设置这个环境变量

SetEnv CI_ENV development

但我实际上想从主机继承环境变量。类似的东西

SetEnv CI_ENV %{CI_ENV}

我试过了:

SetEnv CI_ENV %{ENV:CI_ENV}

但这似乎不起作用。

原因:我正在使用带有 PHP/Apache 容器的 docker。尝试将配置值传递给它,所以如果可能的话,我希望在 htaccess 文件中没有任何硬编码。

我目前的解决方法是在文件中有一个带有 $CI_ENV 的 .htaccess.config 文件,然后使用脚本替换 env 值,但不必这样做会很好。

【问题讨论】:

    标签: apache .htaccess


    【解决方案1】:

    如果使用mod_setevif,则无需重新声明环境变量。

    在你的根 .htaccess 中使用这个指令:

    SetEnvIf Host ^ CI_ENV=development
    

    然后在子目录的任何地方使用它,而无需重新定义它。


    编辑:基于下面的 cmets,看来 OP 正在尝试将系统(shell)环境变量传递给 Apache。

    PassEnv 指令可以这样使用:

    # pass system env CI_ENV to Apache
    PassEnv CI_ENV
    

    现在CI_ENV 将在各种 Apache 指令中用作环境变量。

    【讨论】:

    • 所以 CI_ENV 设置在主机 linux 机器上。我试图不在 htaccess 文件中硬编码变量
    • 所以也许我对 SetEnvIf 的实际作用感到困惑。基本上我已经在启动 apache 的机器上定义了 env 变量,但它们在我的 PHP 脚本中不被接受,除非它们是通过 SetEnv 声明的......所以我只是试图传递这些值(我不想如果有意义,必须输入任何配置“开发”)
    • shell 中定义的环境变量与 Apache 环境变量不同。 Apache 环境变量通过各种 Apache 指令在 Apache 配置文件或 .htaccess 中定义,例如mos_setenvifmod_rewrite 等。
    • 我意识到 - 因此我打开了这张票 :-) 试图找到一种方法来获取从执行 apache 的 shell 定义的环境变量 :-)
    • 检查我编辑的答案。 PassEnv 很可能对你有用。
    猜你喜欢
    • 2014-02-03
    • 2021-04-26
    • 2023-03-27
    • 1970-01-01
    • 2010-10-15
    • 2012-03-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多