Mod rewrite 重定向到非符号链接的虚拟主机目录

Mod rewrite 重定向到非符号链接的虚拟主机目录,mod-rewrite,apache2,Mod Rewrite,Apache2,目前,我将我的/var/www目录安排在每个站点自己的文件夹中,该文件夹以主机名命名(例如/var/www/www.example.com)。当我想同时满足非www版本(或其他版本)的需求时,我只需符号链接到适当的目录(so/var/www/example.com符号链接到/var/www/www.example.com) 我想更进一步,让apache永久重定向到非符号链接目录。我提出了以下重写映射perl脚本: #!/usr/bin/perl $| = 1; while (<STDIN&

目前,我将我的/var/www目录安排在每个站点自己的文件夹中,该文件夹以主机名命名(例如/var/www/www.example.com)。当我想同时满足非www版本(或其他版本)的需求时,我只需符号链接到适当的目录(so/var/www/example.com符号链接到/var/www/www.example.com)

我想更进一步,让apache永久重定向到非符号链接目录。我提出了以下重写映射perl脚本:

#!/usr/bin/perl
$| = 1;
while (<STDIN>) {
    chomp;
    if (-l "/var/www/$_") {
        print readlink . "\n";
    } else {
        print "NULL\n";
    }
}
#/usr/bin/perl
$| = 1;
而(){
咀嚼;
如果(-l)/var/www/$\){
打印readlink。“\n”;
}否则{
打印“空\n”;
}
}
我以前从未犯过错误,所以请原谅我的错误。我已经测试过了,它运行良好,符合规范


困难的部分是实际的重写规则。我已经试过了,这是我力所能及的。我怀疑我需要有一个条件来检查是否存在匹配。

好的,所以在写这个问题的过程中,我发现了一些事情

首先,需要在运行的任何脚本的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虚拟主机,以添加密钥等