Virtualhost重定向不存在的子域并删除www

时间:2013-11-20 17:34:29

标签: apache subdomain virtualhost virtual-hosts

我想设置我的虚拟主机来执行以下操作。对于背景, 在我访问虚拟主机之前,我在.htaccess中的另一台服务器上执行了此操作 使用完全重写。你可以假设,这非常慢。

  • 对example.com的请求保持不变
  • 请求www.example.com永久重定向到example.com
  • 对现有子域(a.example.com或b.example.com)的请求不变, 提供自己的内容
  • 对不存在的子域的请求重定向到example.com

vhosts.conf

<VirtualHost *:80>
    ServerName example.com
</VirtualHost>

<VirtualHost *:80>
    ServerName a.example.com
</VirtualHost>

<VirtualHost *:80>
    ServerName b.example.com
</VirtualHost>

<VirtualHost *:80>
    ServerName www.example.com
    Redirect permanent / http://example.com
</VirtualHost>

第1期

在这种情况下,由于某种原因b.example.com匹配,但a.example.com重定向 到example.com。这看起来很奇怪。

第2期

rstlne.example.com显示example.com的内容,但地址仍显示rstlne.example.com。这是预期的,但我需要知道如何将此案例重定向到example.com。关于重定向不存在的域的唯一想法是让第一个(默认)虚拟主机具有重定向,但在这种情况下example.com将匹配并成为重定向循环。

1 个答案:

答案 0 :(得分:2)

哇,哇。事实证明,我非常接近正确。以下修订工作正常。我的主要问题是:

    vim中的
  1. :e scp://<shortname>//etc/httpd/conf/vhosts/vh.conf,虽然它说控制台返回1,但实际上并不更新需要sudoedit权限的文件。完全愚蠢的错误。需要在ssh控制台中使用sudoedit或类似内容来实际进行需要root的修改。
  2. 我不知道浏览器缓存在记住重定向方面发挥了作用,因此事情表现不佳。
  3. 如果其他人需要做类似的话,我会留下这些信息。

    vhosts.conf

    <VirtualHost *:80>
        ServerName example.com
        ...
    </VirtualHost>
    
    <VirtualHost *:80>
        ServerName a.example.com
        ...
    </VirtualHost>
    
    <VirtualHost *:80>
        ServerName b.example.com
        ...
    </VirtualHost>
    
    <VirtualHost *:80>
        ServerName www.example.com
        ServerAlias *.example.com
        Redirect permanent / http://example.com
    </VirtualHost>
    

    问题1解决方案

    清除浏览器缓存解决了这个问题。它实际上按预期工作。

    问题2解决方案

    在执行重定向的最后一个VirtualHost中匹配CNAME或A记录通配符域。它必须是最后一个,因为VirtualHosts按顺序匹配。因此,任何尚未匹配(存在)的子域都将被通配符捕获,并且像www被重定向一样。

    由于可能会在以后添加子域名,我仍然对永久性地进行通配符匹配有一些保留意见,但这对于SEO的影响可能很小或没有。