任何子域到主域的重写规则

时间:2013-06-05 17:56:43

标签: apache .htaccess mod-rewrite url-rewriting

我有一个名为mailcake.com的网站,我希望有beta.mailcake.com,重定向到mailcake.com,我怎样才能实现这一目标?我在/etc/httpd/conf.d/mailcake.conf

上有这样的
NameVirtualHost *:443

<VirtualHost *:80>
    DocumentRoot /var/www/mailcake
    ServerName mailcake.com
    ServerAlias www.mailcake.com beta.mailcake.com

RewriteEngine On
RewriteCond %{HTTP_HOST} ^beta\.mailcake\.com$ [NC]
RewriteRule (.+)$ "http://mailcake.com" [L,P]   

    ErrorLog /var/log/mailcake.com-error_log
    <Directory />
        Options Indexes FollowSymLinks
        AllowOverride All
    </Directory>
</VirtualHost>

<VirtualHost *:443>
    DocumentRoot /var/www/mailcake
    ServerName mailcake.com
    ServerAlias www.mailcake.com

SSLEngine on
SSLCertificateFile /var/www/mailcake.crt
SSLCertificateKeyFile /var/www/mailcake.key
    ErrorLog /var/log/mailcake.com-error_log
    <Directory />
        Options Indexes FollowSymLinks
        AllowOverride All
    </Directory>
</VirtualHost>

但它不起作用

1 个答案:

答案 0 :(得分:0)

使用几个网址进行测试时,以下内容似乎有效:

RewriteCond %{HTTP_HOST} ^(beta\.)?mailcake\.com
RewriteRule (.*) http://mailcake.com/$1 [QSA]

此处的重要部分是添加$1以确保将任何路径添加到网址中(在您的示例中,http://beta.mailcake.com/stats/会被重定向到http://mailcake.com/,这可能不是此外,添加[QSA]也应确保传递任何查询字符串。

如果您在httpd.conf内进行重定向,我可能也不会添加[L],因为它可能会阻止任何.htaccess文件中的其他有效重定向工作。< / p>