通过 cookie 值设置 DocumentRoot

通过 cookie 值设置 DocumentRoot

我正在尝试为包含特殊 cookie 值的请求提供不同的内容(其他 DocumentRooot)。

使用 nginx 时非常简单:

set $newroot "oi-dev";

if ($cookie_interface = "ni") {
    set $newroot "ni-dev";
}

然后:root /path/to/document/$newroot;

不幸的是,尝试在 Apache(使用 2.4)中重新创建这种效果并没有按预期工作。

<If "%{HTTP_COOKIE} =~ /interface=ni/">
    Header set droot-matched true
    Define Droot /path/to/document/ni-dev
</If>
<Else>
    Define Droot /path/to/document/oi-dev
</Else>
DocumentRoot ${Droot}

这很奇怪,因为droot-matched当设置了正确的 cookie 时会发送控制标头(),但 Apache 仍然使用${Droot}来自部分的值<Else>作为 DocumentRoot。

我也尝试过使用 VirtualDocumentRoot,但结果完全相同。

我是否遗漏了一些明显的东西,或者还有其他方法可以在 Apache 中实现所描述的效果?

答案1

我试图实现相同的结果,但没有成功。遗憾的是这里没有回复,所以我也有同样的问题,以及为什么执行 Else 代码的可能解释...

我认为 If 和 Else 都经过了评估,对吗?(这可以解释 droot-matched 被设置,并且 Droot 匹配第二个值)。

如果删除 Else 语句,If 语句是否可以“按预期”工作?

相关内容