我有一台服务器(本身位于子域中),其中有通配符 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/subfolder
404。
答案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 要简单得多。虽然找到它很麻烦,但我希望这对将来的其他人有所帮助。