如何高效将200+页面从子域名批量301重定向到新域名对应页面(避免服务器过载)
如何高效将200+页面从子域名批量301重定向到新域名对应页面(避免服务器过载)
兄弟,我明白你现在急着搞定这200+页面的重定向,还怕服务器扛不住——别慌,咱们一步步来解决这个问题。
首先,你的旧规则完全没切中需求
先看你之前写的规则:
RewriteEngine on RewriteCond %{HTTP_HOST} ^example.com [NC,OR] RewriteCond %{HTTP_HOST} ^www.example.com [NC] RewriteRule ^(.*)$ https://example.net/$1 [L,R=301,NC]
这规则是把example.com和www.example.com的请求全转到example.net,和你要把blog.example.com转到www.example.com/blog的需求完全不沾边!怪不得只有首页(其实这个规则根本没处理blog.example.com的请求),所以得完全换掉。
正确的批量重定向Apache规则
直接用下面这套规则,能一次性把blog.example.com下的所有页面(包括子路径)重定向到新地址的对应位置:
RewriteEngine On # 匹配blog.example.com的所有请求 RewriteCond %{HTTP_HOST} ^blog\.example\.com$ [NC] # 将请求的路径(比如/post/123)追加到新地址的/blog后面 RewriteRule ^(.*)$ https://www.example.com/blog/$1 [L,R=301,NC]
解释下关键部分:
%{HTTP_HOST} ^blog\.example\.com$:精准匹配blog.example.com这个子域名,避免误匹配其他域名。^(.*)$:捕获请求的完整路径(从域名后面的斜杠开始,比如/how-to-write或者空的首页路径)。https://www.example.com/blog/$1:把捕获到的路径拼到新地址的/blog/后面,实现一一对应。[L,R=301,NC]:L表示这是最后一条规则,匹配后不再往下走;R=301标记永久重定向(对SEO友好);NC表示不区分大小写。
避免服务器过载的关键优化技巧
- 把规则放到服务器配置文件,别用.htaccess
.htaccess是每次请求都要读取解析的,而把规则直接写到Apache的虚拟主机配置(比如httpd.conf或者sites-available下的配置文件)里,服务器启动时就加载完成,性能会好很多,尤其当请求量很大的时候。 - 利用301的浏览器缓存特性
301是永久重定向,浏览器会自动缓存这个跳转规则,用户第一次访问后,后续请求会直接在浏览器端跳转,根本不会打到你的服务器——这是减轻负载最有效的方式,不用额外做什么,只要用对R=301就行。 - 简化规则,减少匹配开销
不要加多余的条件,比如只保留针对blog.example.com的匹配条件,避免服务器做不必要的判断。
要不要一个个写重定向?
完全不用!上面的规则已经能覆盖所有页面的一一对应重定向,不管你有200还是2000个页面,都能一次性搞定,而且性能开销极低。
备注:内容来源于stack exchange,提问作者user18571
相关产品推荐
相关产品推荐

