使用 Apache .htaccess 设置 DYNAMIC PHP $_SERVER 值 ($_SERVER['


Setting a DYNAMIC Php $_SERVER value ($_SERVER['something']) using Apache .htaccess

这是对这个问题的一个解释,我们了解到我们可以使用 SetEnv 设置一个$_SERVER var 。

下一个问题是:有没有办法像这样使用SetEnv:

/

var/www/www.example.com/module/unique_section/.htaccess:

SetEnv RESOURCE_ROOT %{DIRECTORY}
/var/www

/www.example.com/module/unique_section/some/path/file.php

<?php echo $_SERVER['RESOURCE_ROOT']; ?>

输出:/var/www/www.example.com/module/unique_section/

根据您需要的信息,您可以使用RewriteRule执行此操作。例如:

RewriteEngine On
RewriteCond %{DOCUMENT_ROOT} (.*)
RewriteRule (.*) - [E=RESOURCE_ROOT:%1]

将 PHP var $_SERVER['RESOURCE_ROOT']$_SERVER['REDIRECT_RESOURCE_ROOT']设置为您的 Apache 文档根目录。有关完整详细信息,请参阅mod_rewrite手册,但%{DOCUMENT_ROOT}%{PATH_INFO}%{REQUEST_FILENAME}的某种组合可能适合您。

我认为.htaccess文件不可能知道它驻留在哪个目录中。所以我认为您需要在.htaccess文件中使用硬编码路径。举个例子:

RewriteEngine On
RewriteCond %{DOCUMENT_ROOT} (.*)
RewriteRule (.*) - [E=RESOURCE_ROOT:%1/module/unique_section/]

我所知,setEnv 无法访问 apache 环境变量。因此,%{DIRECTORY} 不起作用,除非您希望该值专门为"%{DIRECTORY}"。使用 mod_rewrite,这对我获取正在加载的文件的路径很有用:

RewriteEngine On
RewriteCond %{SCRIPT_FILENAME} ((.*)/)
RewriteRule (.*) - [E=RESOURCE_ROOT:%1]

输出:

var_dump(__FILE__);
//outputs: string(27) "/var/www/sub/test/index.php" 
var_dump($_SERVER['RESOURCE_ROOT']);
//outputs: string(24) "/var/www/sub/test/"

除此之外,仅仅使用 php 并执行dirname(__FILE__)dirname($_SERVER['PHP_SELF'])有什么问题吗?

您可以使用

函数apache_getenv来获得所需的内容。

友情链接 : http://php.net/manual/en/function.apache-getenv.php

不要忘记阅读文档:

此函数需要 Apache 2,否则它是未定义的。

例:

<?php
$ret = apache_getenv("SERVER_ADDR");
echo $ret;
?>

上面的示例将输出类似于以下内容的内容:

42.24.42.240

但是,正如此威胁中所建议的那样,您可以只使用dirname(__FILE__)并且从 PHP 5.3.0 开始,您可以将__DIR__用作魔术常数。