在摆弄 public 树时修复 DOCUMENT_ROOT

Fix DOCUMENT_ROOT when fiddling with public tree

我必须处理不允许非 public 目录的托管服务。我通常可以使用 mod_rewrite 插入额外的目录级别:

# /home/foo/public_html/.htaccess
<IfModule mod_rewrite.c>
    RewriteEngine on
    RewriteRule ^$ public/ [L]
    RewriteRule (.*) public/ [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 实际上是保留的 Apache+PHP 变量,不能在 .htaccess 或 Apache 配置中被覆盖。 DOCUMENT_ROOT indicates document root directory of your website.

您可以根据您的情况使用任何其他变量名称,例如 DOC_ROOT