在摆弄公共树时修复 DOCUMENT_ROOT
Posted
技术标签:
【中文标题】在摆弄公共树时修复 DOCUMENT_ROOT【英文标题】:Fix DOCUMENT_ROOT when fiddling with public tree 【发布时间】:2018-09-09 18:01:19 【问题描述】:我必须处理不允许非公共目录的托管服务。我通常可以使用mod_rewrite
插入一个额外的目录级别:
# /home/foo/public_html/.htaccess
<IfModule mod_rewrite.c>
RewriteEngine on
RewriteRule ^$ public/ [L]
RewriteRule (.*) public/$1 [L]
</IfModule>
...所以http://example.com/test.php
加载/home/foo/public_html/public/test.php
而不是/home/foo/public_html/test.php
。但这不会改变 DOCUMENT_ROOT
环境变量的值。
有没有办法更改.htaccess
文件中的变量?我的尝试并没有走得太远——我设置的值:
SetEnv DOCUMENT_ROOT /home/foo/public_html/public
… 以REDIRECT_DOCUMENT_ROOT
结尾。
【问题讨论】:
您真正需要DOCUMENT_ROOT
做什么?
@MarcinOrlowski 我知道你的意思,没有它我当然可以生活。但我对这个特定的工具很好奇。
还不错:-)
DOCUMENT_ROOT
是保留的 Apache 变量,无法在 .htaccess 中覆盖。您可以使用任何其他变量名称,例如 DOC_ROOT
@anubhava 随意发布它作为答案,我很乐意接受。
【参考方案1】:
DOCUMENT_ROOT
实际上是保留的 Apache+PHP 变量,不能在 .htaccess
或 Apache 配置中覆盖。 DOCUMENT_ROOT
indicates document root directory of your website.
您可以为您的案例使用任何其他变量名称,例如 DOC_ROOT
。
【讨论】:
只是备注:PHP 的$_SERVER
包含 Apache 提供的值的副本,但实际上它可以像所有其他键一样写入。
是的,这是真的。在 PHP 代码中,您可以覆盖这些变量以上是关于在摆弄公共树时修复 DOCUMENT_ROOT的主要内容,如果未能解决你的问题,请参考以下文章