如何使用mod_rewrite在域之间重定向多个主机?

时间:2014-11-15 23:11:50

标签: mod-rewrite apache2.2

我试图将拼写错误的域名请求重定向到官方域名的同一台服务器。

我的apache配置如下:

<VirtualHost *:80>
        RewriteEngine on

        # Fix domain spellings in host.<backupdomain>
        RewriteCond %{HTTP_HOST} !([^.]+).example.com [NC]
        RewriteRule ^/(.*) http://%1.example.com/$1 [NC,R,L]
</VirtualHost>

我知道我已经关闭了,因为对server99.wrongdomain的请求被重新写入.example.com - 我希望它能转到server99.example.com。

为什么正则表达式捕获/扩展在这里没有正常工作?

P.S。令人难以置信的是,SO正在阻止我的原始示例,因为它们看起来像链接(!)

2 个答案:

答案 0 :(得分:1)

如果您想匹配其他内容不匹配的内容,则可以使用否定前瞻

RewriteCond %{HTTP_HOST} ^([^.]+)\.(?!example\.com) [NC]
RewriteRule ^/(.*)$ http://%1.example.com/$1 [NC,R,L]

这样,每个错误的域名(例如server99

  • server99.example.co.uk
  • server99.exampel.com

将重定向到server99.example.com

答案 1 :(得分:0)

如果您只想重定向拼写错误的子域,那么这几乎就是您需要的一切。

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

RedirectMatch 301 /(.*) http://www.example.com/$1

</VirtualHost>

如果要重定向没有uniqe VHost配置的每个请求,请使用以下内容并确保它是由apache加载的第一个VHOST配置

<VirtualHost _default_:80>
RedirectMatch 301 /(.*) http://www.example.com/$1
</VirtualHost>

当然,只有当FQDN的DNS记录指向相关的apache时才有效。