我试图将拼写错误的域名请求重定向到官方域名的同一台服务器。
我的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正在阻止我的原始示例,因为它们看起来像链接(!)
答案 0 :(得分:1)
如果您想匹配其他内容不匹配的内容,则可以使用否定前瞻。
RewriteCond %{HTTP_HOST} ^([^.]+)\.(?!example\.com) [NC]
RewriteRule ^/(.*)$ http://%1.example.com/$1 [NC,R,L]
这样,每个错误的域名(例如server99
)
将重定向到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时才有效。