如何使用 mod_alias “Redirect” 指令将多个域名重定向至“www.”?

如何使用 mod_alias “Redirect” 指令将多个域名重定向至“www.”?

我正在尝试将多个 VirtualHosts 重定向到没有前面的“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>

我可以创建多个 VirtualHost 容器并单独重定向每个容器,但如果可能的话,我宁愿不要重复我的代码。

我正在使用 Apache 2.2 和我不喜欢使用 mod_rewrite重定向。我对 Apache 还算了解,但还远远算不上专家。

答案1

我在 .htaccess 文件中编写了以下条件,用于重定向任何不带“www”的域名,这适用于任何域名。域名查找可以做得更全面,例如,我只在域名中查找数字、字母和下划线,因为我知道适用此规则的所有域名都只有这些,但如果您需要,您可以轻松地用更复杂的正则表达式替换该正则表达式。

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

答案2

我使用的解决方案不符合“不要重复自己”的原则,但它确实有效,并帮助我实现了不使用 mod_rewrite 的偏好。如果有更好的解决方案,我很乐意将您的答案标记为正确。

<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>

答案3

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

<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

相关内容