如何使用mod_alias“redirect”指令将多个域redirect到“www”?

我试图redirect多个虚拟主机没有前面的“www”。 从一个VirtualHost到另一个,就像这样:

<VirtualHost *:80> ServerName example.com ServerAlias example.org ServerAlias example.net # I either need some kind of Apache conditional here... Redirect 301 / http://www.example.com/ # ... or I need to substitute the Redirect *URL* with a variable # for the ServerName/ServerAlias </VirtualHost> <VirtualHost *:80> ServerName www.example.com </VirtualHost> 

我可以创build几个VirtualHost容器并单独redirect每个容器,但是如果可能的话,我不想重复我的代码。

我正在使用Apache 2.2, 我不想使用mod_rewriteredirect。 我对Apache公平,但远不是专家。

我写了下面的条件,我正在使用.htaccess文件redirect任何域没有“www”,这个工作的任何域名。 域的外观可以做得更全面,例如我只在域名中查找数字,字母和下划线,因为我知道这个规则将应用的所有域将会是这样,但是您可以很容易地用正则expression式replace如果你需要更复杂的。

  RewriteCond %{HTTP_HOST} ^([a-zA-Z0-9-_]*)\.([a-zA-Z0-9]{2,3})$ [NC] RewriteRule ^(.*)$ http://www.%1.%2/$3 [L,R=301] 

我使用的解决scheme不是“不要重复自己”友好,但它的工作原理,并帮助我实现我的不使用mod_rewrite的首选项。 任何更好的解决scheme,我会很高兴地标记你的答案。

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

假设他们都去一个虚拟主机,我会这样做:

 <VirtualHost *:80> ServerName _default_:80 Redirect / http://www.example.com/ </VirtualHost> <VirtualHost *:80> ServerName www.example.com DocumentRoot /var/www/html/ </VirtualHost> 

*更新*

也许这会帮助你? Apache 2.4模块mod_macro 1.2.1