是否可以在 .htaccess 文件中创建动态 SetEnv?

Is it possible to create a dynamic SetEnv in an .htaccess file?

目前我正在尝试设置一个环境变量以指向一个目录,但我需要它是动态的。

目前我有以下

SetEnv WP_DIR /home/user101/website/public_html/www/app

是否可以使 WP_DIR 变量动态获取 /home/user101/website/public_html/www 部分?

类似于:

SetEnv WP_DIR ${CURRENT_PATH}/app

请记住,我对此很陌生。

您可以使用 PassEnv directive 将环境变量从系统传递到 Apache:

PassEnv CURRENT_PATH

SetEnv WP_DIR ${CURRENT_PATH}/app

SetEnv 不具备处理动态数据作为其值的能力。但是 mod_rewrite 可以为您解决这个问题。据我所知,没有 ENV 变量包含目录的当前绝对路径。但是你可以写一些花哨的东西来抓住它:

RewriteCond [=10=]#%{REQUEST_URI} ([^#]*)#(.*?)/?$
RewriteRule ^.*$ - [E=WP_DIR:%{DOCUMENT_ROOT}%2/app]

然而,从 .htaccess 设置 ENV 变量并不是那么可靠,因为如果 URL 被重写,它们可能会以 REDIRECT_ 为前缀。您必须留意来自 PHP.

REDIRECT_ 前缀变量

如果你一开始就必须做这种事情,我认为你的代码是错误的,PHP 有能力处理这种逻辑。

如果您尝试将请求重写为 index.php 并绕过 .htaccess 的问题,当您想要从 .htaccess 设置 ENV 变量时,它会在您的变量名前添加 REDIRECT_对于 PHP,我强烈建议首先不要使用 ENV 变量。一种方法是 RewriteRule ^(.*)$ index.php?_url=/ [QSA,L]。但我不喜欢这种丑陋的方法,因为它使用查询字符串。我发现的最佳方法是简单地将您的请求重写为 index.php,然后您从 PHP 读取 strtok($_SERVER["REQUEST_URI"],'?') 将包含用户请求的请求,但不包含查询字符串。对于此类参数,您仍然会引用 $_GET[...]