0

目前,我将我的 /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";
    }
}

我以前从来没有过错,所以请原谅任何错误。我已经对其进行了测试,它运行良好并且符合规范。

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

4

1 回答 1

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 站点的默认包罗万象的虚拟主机以添加密钥等...

于 2013-11-12T03:25:17.910 回答