【问题标题】:Fix DOCUMENT_ROOT when fiddling with public tree在摆弄公共树时修复 DOCUMENT_ROOT
【发布时间】: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 随意发布它作为答案,我很乐意接受。

标签: apache .htaccess apache2.4


【解决方案1】:

DOCUMENT_ROOT 实际上是保留的 Apache+PHP 变量,不能在 .htaccess 或 Apache 配置中覆盖。 DOCUMENT_ROOT indicates document root directory of your website.

您可以为您的案例使用任何其他变量名称,例如 DOC_ROOT

【讨论】:

  • 只是备注:PHP 的 $_SERVER 包含 Apache 提供的值的副本,但实际上它可以像所有其他键一样写入。
  • 是的,这是真的。在 PHP 代码中,您可以覆盖这些变量
猜你喜欢
  • 1970-01-01
  • 2021-09-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-04-05
  • 1970-01-01
  • 1970-01-01
  • 2014-05-28
相关资源
最近更新 更多