这是对这个问题的一个解释,我们了解到我们可以使用 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__
用作魔术常数。