【问题标题】:Apache SetEnv prepends REDIRECT_ . What gives?Apache SetEnv 预先设置 REDIRECT_ 。是什么赋予了?
【发布时间】:2010-02-15 18:12:25
【问题描述】:

对于基于 Zend Framework 的应用程序,我在 .htaccess 中使用 apaches SetEnv。我在测试、登台和生产服务器上使用它,如下所示:

SetEnv APPLICATION_ENVIRONMENT production

在登台服务器上,我无法在 PHP 中读取此环境变量。但是,当我在 php 中执行 var_dump( $_ENV ) 时,我得到了值,但密钥前面加上了 REDIRECT_ 成为

REDIRECT_APPLICATION_ENVIRONMENT

谁能解释为什么会发生这种情况,以及如何防止这种情况发生?

【问题讨论】:

    标签: php apache setenv


    【解决方案1】:

    我猜你的 .htaccess 中也有 Zend 的 mod_rewrite 规则?我相信它可能是 mod_rewrite 在它进行重定向时预先设置的,以便该值不会被具有新 URL 的任何新设置覆盖。

    【讨论】:

    • 你猜对了。您对 mod_rewrite 的看法可能是对的,但我不相信其他服务器也会显示这种行为,并且它们具有完全相同的 mod_rewrite 设置。我得去看看。到目前为止,谢谢。
    • @fireeyedboy 除了论坛帖子中的用户 cmets 和没有实际可靠的来源信息之外,我实际上很惊讶地发现几乎没有关于这个问题的信息。我确实看到过一两篇关于它是特定于 Apache 版本的帖子,您的登台机器的 Apache 版本是否与您的开发和生产版本不同?您的开发和生产是否相同,并且在其中任何一个上都没有这样做?
    • @fireeyedboy 你能详细说明一下吗——你做了什么来解决这个问题吗?
    • @CharlieS 我使用以下内容在我的 index.php 文件中定义常量:defined( 'APPLICATION_ENVIRONMENT' ) || define( 'APPLICATION_ENVIRONMENT', getenv( 'APPLICATION_ENVIRONMENT' ) ? getenv( 'APPLICATION_ENVIRONMENT' ) : ( getenv( 'REDIRECT_APPLICATION_ENVIRONMENT' ) ? getenv( 'REDIRECT_APPLICATION_ENVIRONMENT' ) : 'production' ) );(如果找不到环境变量,则默认为“生产”)
    【解决方案2】:

    我遇到了同样的问题,这是因为在我的 Apache 中将 PHP 作为 cgi 运行。

    启用 mod_php 后,我可以在没有前缀的情况下访问我的变量。

    【讨论】:

      猜你喜欢
      • 2014-02-03
      • 2018-08-11
      • 2016-05-30
      • 2013-12-09
      • 2013-05-21
      • 2021-01-20
      • 1970-01-01
      • 2018-09-12
      • 2011-03-04
      相关资源
      最近更新 更多