【问题标题】:How to pass Apache environment variable to url in .htaccess如何将 Apache 环境变量传递给 .htaccess 中的 url
【发布时间】:2017-04-21 03:43:20
【问题描述】:

我正在通过php函数设置一个apache环境变量apache_setenv

apache_setenv("EXAMPLE_VAR", "Example Value");

但是我在访问.htaccess 中的这个变量时遇到问题,无论如何我都无法在.htaccess 中使用这个环境变量。但我可以通过 php getenv() 访问它。

问题不仅在于通过 php 设置变量,我无法访问 .htaccess 本身设置的环境变量。

我试过了

假设环境变量为www.domain.com

RewriteEngine On
RewriteCond ^(.*)$ test.php?id=%{ENV:VARIABLE} [L]

&

RewriteEngine On
RewriteCond %{ENV:VARIABLE} ^www.(.+)
RewriteRule ^ test.php?id=%1 [L]

以及其他类似的测试,以验证 env 变量是否已设置并正常运行。

Mod_env 和 mod_rewrite 已开启。

【问题讨论】:

  • 一个有趣的问题++
  • 父进程 (Apache) 无法访问在子进程 (PHP) 中更改或设置的环境变量。
  • PHP 模块在 mod_rewrite 模块完成运行后被调用,因此在重写规则中看不到通过 PHP 进行的更改。
  • @anubhava @OlafDietsche 但是即使在.htaccess 中设置它们后我也遇到了问题,我无法掌握.htaccess 中的环境变量的概念。如果我无法在.htaccess 中访问它们,这里服务的 apache_setenv 是什么?
  • apache_setenv 是 PHP 函数。您如何在 .htaccess 中设置变量?

标签: apache .htaccess mod-env


【解决方案1】:

由于 Apache 加载模块的顺序,mod_rewrite 看不到使用 SetEnv 指令的变量集。像这样使用SetEnvIf

SetEnvIf Host ^ VAR=/foo/bin

然后在mod_rewrite规则中使用:

RewriteEngine On

RewriteCond %{ENV:VAR} =/foo/bin
RewriteRule ^home/?$ /something [L,NC]

【讨论】:

  • 谢谢先生,我也从中得到了一些其他的想法。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-12-29
  • 2016-07-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多