目前,我将每个站点的/ var / www目录安排在以主机名命名的自己的文件夹中(例如/var/www/www.example.com)。当我还想迎合非www版本(或其他东西)时,我只需将符号链接到正确的目录(所以/var/www/example.com符号链接到/var/www/www.example.com).
我想更进一步,让apache永久重定向到非符号链接目录。我想出了以下RewriteMap perl脚本:
#!/usr/bin/perl
$| = 1;
while (<STDIN>) {
chomp;
if (-l "/var/www/$_") {
print readlink . "\n";
} else {
print "NULL\n";
}
}
我从来没有这样做过,原谅任何错误。我测试了它,它运行良好并符合规范。
困难的部分是实际的重写规则。我已经尝试了这个,就我所知。我怀疑我需要有条件检查是否有匹配。
答案 0 :(得分:0)
首先,需要在运行任何脚本的NULL之后提供换行符。我把它放在了问题中。然后我们检查匹配是否不是空字符串并从那里继续:
VirtualDocumentRoot /var/www/%0
RewriteEngine On
RewriteMap symlinks prg:/var/www/redirector.pl
RewriteCond ${symlinks:%{HTTP_HOST}} !=""
RewriteRule ^/(.*) http://${symlinks:%{HTTP_HOST}}/$1 [R=301,L]
我的解决方案忽略了SSL,但您可能会覆盖SSL网站的默认catchall虚拟主机以添加密钥等...