Mod Rewrite规则正在改变PHP中的CWD-为什么?
我有一个奇怪的问题,我找不到文档。我在服务器的以下位置有一个页面Mod Rewrite规则正在改变PHP中的CWD-为什么?,php,apache,.htaccess,mod-rewrite,working-directory,Php,Apache,.htaccess,Mod Rewrite,Working Directory,我有一个奇怪的问题,我找不到文档。我在服务器的以下位置有一个页面 {SITE_ROOT}/admin/myfolder/myfile.php 这个文件使用一个include来运行一个全局配置文件,该文件驻留在服务器的根目录上——它是相对于自身来运行的 // {SITE_ROOT}/admin/myfolder/myfile.php // includes {SITE_ROOT}/config.php See below explanation after edit include('..
{SITE_ROOT}/admin/myfolder/myfile.php
这个文件使用一个include来运行一个全局配置文件,该文件驻留在服务器的根目录上——它是相对于自身来运行的
// {SITE_ROOT}/admin/myfolder/myfile.php
// includes {SITE_ROOT}/config.php See below explanation after edit
include('../config.php);
在我将以下.htaccess文件添加到myfolder目录之前,这一切都很正常
// {SITE_ROOT}/admin/myfolder/.htaccess
RewriteEngine On
RewriteRule ^([0-9A-Z]+)\.gif$ gif_generator.php?gifid=$1 [L]
这条规则的目的并不重要——事实上,上面的页面(myfile.php)不应该受到这条规则的影响(除非我弄错了,否则它不应该与正则表达式匹配——我很可能是这样)。然而,当使用此规则时,myfile.php中的include()似乎会失败。这就好像是由于启用了重写引擎,php文件的当前工作目录发生了更改
是否在任何地方对此进行了记录,是否有办法防止这种情况发生
编辑-我错过了一件相当重要的事情。原始文件({SITE_ROOT}/admin/myfolder/myfile.php)本身被一个文件包含在以下位置({SITE_ROOT}/admin/frontcontroller.php)。php中的include路径实际上是相对于该文件的。为了反映这一点,我改变了上述问题。也许这对您有用:
dirname(__FILE__)
返回文件所在的目录。因此,如果您知道站点的目录结构,您可以使用
dirname(dirname(__FILE__))
你也可以使用
DIRECTORY_SEPARATOR
获取特定于服务器操作系统的目录分隔符
在你的情况下,这将成为
include(rtrim(dirname(dirname(__FILE__)),'/\\').DIRECTORY_SEPARATOR.'config.php')
重写规则与您的url不匹配,因此这没有多大意义。这就是你的.htaccess文件中的全部内容吗?@stephenbayer-这就是整个文件。该目录中还有另一个文件使用php动态生成gif图像,这就是规则。@stephenbayer-抱歉,我在最初的问题中遗漏了一个相当重要的信息。现在更新了。这对我来说没有多大意义:
include('/../config.php)代码>--路径以前导斜杠开始(表示绝对路径)。不要使用这样的相对路径,而是使用更可靠的方法:对于{SITE\u ROOT}/config.php
使用include($\u SERVER['DOCUMENT\u ROOT']./config.php')代码>