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

时间:2013-11-12 03:25:18

标签: mod-rewrite apache2

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

我从来没有这样做过,原谅任何错误。我测试了它,它运行良好并符合规范。

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

1 个答案:

答案 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虚拟主机以添加密钥等...