对mod_vhost_alias使用fall-through重写

时间:2014-05-24 02:55:43

标签: apache mod-rewrite mod-vhost-alias

我在测试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的目的是为了避免首先需要所有这些VirtualHost。

1 个答案:

答案 0 :(得分:0)

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

  • 设置mod_rewrite规则以删除领先的www。来自请求,
  • 或在每个vhost中设置重定向,以使用前导www重定向请求。到顶级域名