1

我在我的测试 VPS 上运行了几十个站点,目前使用 mod_vhost_alias 来避免每次我抛出一个新站点时都需要一个新的 VirtualHost。我当前的配置如下所示:

<VirtualHost *:80>
  ServerName my.servername.com
  ServerAlias *
  VirtualDocumentRoot /var/www/%0/public_html
</VirtualHost>

在我的 /var/www 目录中,每个站点都有自己的目录。例如,我的个人页面的路径是 /var/www/personalsite.com/public_html/index.php。这非常适合对http://personalsite.com的请求。

但是,当请求进入 http://www.personalsite.com 时,这不起作用。对于我的其他一些站点,我遇到了相反的问题——目录可能是 /var/www/www.sitename.com/public_html,因此对http://www.sitename.com的请求很好。但是,对http://sitename.com的请求不起作用。

有没有办法设置我的 Apache 配置,以便在收到请求时执行以下操作?这样做有什么性能影响吗?

在伪代码中:

1. Check if the directory or file exists. If it does, skip the rest of the rules 
       (but don't stop, in case a local .htaccess has rules in it for pretty URLs 
       in WordPress or Concrete5)
2. If the file/directory does not exist:
    1. If the host header starts with "www":
        1. remove the www from the host header and try the first rule again.
    2. If the host header does not start with "www":
        1. add "www" to the beginning  of the host header and try the first rule again
    3. If it still fails after trying both conditions:
        1. Go to a 404 error page

我目前正在使用大约 20 个虚拟主机来执行此操作,但是当我必须为每个站点添加一个新主机时,这似乎很荒谬。使用 mod_vhost_alias 的目的是首先避免需要所有这些虚拟主机。

4

1 回答 1

0

假设您可以重定向用户,您可以使用https://stackoverflow.com/a/2361508/881615中的一种技术:

  • 要么设置mod_rewrite规则以删除领先的 www。从请求中,
  • 或在每个虚拟主机中设置重定向以重定向带有前导 www 的请求。到顶级域
于 2014-05-24T03:07:58.837 回答