【问题标题】:htaccess SetEnv REDIRECT_ prefixhtaccess SetEnv REDIRECT_ 前缀
【发布时间】:2014-02-03 22:26:12
【问题描述】:

我在 htaccess 文件中设置了一个环境变量,并且在它前面加上了“REDIRECT_”。据我所知,这是由 URL 重写引起的。问题是,我没有进行任何重写(我知道)。

我的网站空间包含两个文件:

.htaccess

SetEnv Foo "bar"

index.php

<?php
print_r($_ENV);

现在,我猜测这可能与它位于与 1&1 的共享主机包上的事实有关。还有什么我应该检查的或者有没有人经历过这个前?还是我只是错过了什么??

干杯

【问题讨论】:

标签: apache .htaccess


【解决方案1】:

首先,SetEnv 的语法是错误的。应该是这样的:

SetEnv Foo "bar"

然后要从 PHP 访问这个字段,你需要做:

echo $_SERVER["Foo"];

应该显示为“bar”。

【讨论】:

  • 我尝试更改语法,但得到相同的结果。 $_SERVER['Foo'] 未设置;相反,我得到 $_SERVER['REDIRECT_Foo'] (And ($_ENV['REDIRECT_Foo']) 的值为 'bar'
  • 这可能是由于您的httpd.conf/.htaccess 中的一些规则。如果您的.htaccess 中有任何现有代码,请将其发布在您的问题中。
  • SetEnv Foo="bar" 和 SetEnv Foo "bar" 产生相同的结果
  • 这是不正确的,因为SetEnv Foo="bar" 设置了一个名称为Foo="bar" 的变量没有值,但在您的情况下,很可能在某处发生了一些重写并在REDIRECT_ 前添加前缀
【解决方案2】:

问题是由使用 PHP 作为 CGI Wrapper 触发的。如果 PHP 作为 mod_php apache 模块运行,它不会为您的变量添加前缀。

原因是内部重定向处理,因此 apache 使用 REDIRECT_ 前缀重新创建变量:-/

解决方案(更新)

使用 PHP-FPM 或 mod_php

如果你想为 PHP 使用 CGI Wrapping,把它放到你的 .htaccess 中:

RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}]

【讨论】:

  • 我正在使用 Apache 2.4 + mod_fastcgi + php-fpm 运行 'alias' 指令来映射到外部 fastcgi 路径,我认为这是我的 'REDIRECT_' env var 重命名的原因,切换后使用“mod_proxy_fastcgi”,即使使用相同的 .htaccess 规则,问题不再存在。
  • 另外,如何使用php-fpm但没有cgi wrapping?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-08-16
  • 1970-01-01
  • 1970-01-01
  • 2016-09-19
  • 2013-08-01
  • 1970-01-01
  • 2014-08-01
相关资源
最近更新 更多