Lighttpd 将子域名重写为子文件夹

Lighttpd 将子域名重写为子文件夹

我有一台服务器(本身位于子域中),其中有通配符 DNS 指向它。该服务器正在运行 Lighttpd 和 PHP。

我需要将请求http://any-subdomain.server.example.com重写到那里http://server.example.com/site/any-subdomain并从那里提供服务。它必须对用户完全透明。

这是我的相关配置:

$HTTP["host"] =~ "^(.*)\.server\.example\.com$" {
    url.rewrite-once = ( "^(.*)" => "/site/%1/$1" )
}

除了子文件夹外,它似乎都可以工作,子文件夹会被重定向到subdomain.server.example.com/site/subdomain/subfolder404。

答案1

url.rewrite-once改变URL 路径(和查询字符串);您的重写规则看起来就像您正在尝试重写到磁盘上的文件夹。

您无法“重写”主机,但您可以处理具有相同物理文件映射(和 fastcgi 后端等)的两个主机名;例如,您可以server.document-root从另一个 vhost 复制设置,或者只是让另一个 vhost 有条件地匹配两个主机名。

如果您有“catch-all”默认 vhost 块,请记住,对于每个配置选项,最后一个活动块设置会覆盖所有其他块(使用该-p选项查看评估后的内部顺序+=等等),因此从默认 vhost 开始。

仅供记录:“相关”配置至少包括两个虚拟主机的部分,而不仅仅是第二个:)

答案2

我找到了比使用重写更好的方法。相反,我使用了mod_simple_vhost

simple-vhost.server-root = "/var/www/site/"
simple-vhost.default-host = "myquick.club"
simple-vhost.document-root = "www"

在这种情况下,这比使用 mod_rewrite 要简单得多。虽然找到它很麻烦,但我希望这对将来的其他人有所帮助。

相关内容