域名重定向失效排查:blog.all-of-knb.pl跳转至kuroko-no-basuke.make4u.eu失败
问题:为何域名https://blog.all-of-knb.pl/重定向至https://kuroko-no-basuke.make4u.eu/无法生效?
用户当前配置的Apache重写规则如下:
RewriteEngine On RewriteCond %{HTTP_HOST} ^www\.blog.all-of-knb\.pl$ RewriteRule ^/?$ "http\:\/\/kuroko-no-basuke\.make4u\.eu\/" [R=301,L] RewriteCond %{HTTP_HOST} ^.blog.all-of-knb\.pl$ RewriteRule ^/?$ "http\:\/\/kuroko-no-basuke\.make4u\.eu\/" [R=301,L]
问题分析与修复方案
1. 非www域名的正则匹配错误
第二个RewriteCond里的^.blog.all-of-knb\.pl$存在逻辑问题:
- 正则表达式中,
.代表任意单个字符,所以这个规则会匹配类似xblog.all-of-knb.pl的域名,但完全不会匹配你需要的blog.all-of-knb.pl(开头没有额外字符)。 - 正确的非www域名匹配应该是
^blog\.all-of-knb\.pl$(注意转义域名里的.,避免被当作正则通配符处理)。
2. 仅匹配根目录,无法覆盖全站路径
你的RewriteRule ^/?$ ...只匹配网站根目录(比如https://blog.all-of-knb.pl/),如果用户访问子路径(比如https://blog.all-of-knb.pl/posts/1),重定向完全不会触发。要实现全站重定向,应该把规则改成^(.*)$,并在目标URL后保留原路径:https://kuroko-no-basuke.make4u.eu/$1。
3. 冗余的转义与引号
规则里的"http\:\/\/..."完全可以简化——Apache的RewriteRule支持直接写https://,不需要转义斜杠,也不需要额外添加引号,冗余的格式反而可能导致解析异常。
修正后的完整规则
RewriteEngine On # 匹配带www前缀的域名,全站重定向 RewriteCond %{HTTP_HOST} ^www\.blog\.all-of-knb\.pl$ [NC] RewriteRule ^(.*)$ https://kuroko-no-basuke.make4u.eu/$1 [R=301,L] # 匹配不带www的主域名,全站重定向 RewriteCond %{HTTP_HOST} ^blog\.all-of-knb\.pl$ [NC] RewriteRule ^(.*)$ https://kuroko-no-basuke.make4u.eu/$1 [R=301,L]
额外提示
- 添加
[NC]标志可以忽略大小写匹配(比如兼容Www.Blog.All-Of-Knb.Pl这类大小写混合的请求),提升规则的兼容性。 - 测试阶段建议先用
R=302临时重定向,确认规则生效后再改回R=301永久重定向,避免浏览器缓存错误的重定向规则。 - 务必确保你的Apache服务器已经启用了
mod_rewrite模块,否则所有重写规则都不会生效。
内容的提问来源于stack exchange,提问作者Paul
相关产品推荐
相关产品推荐

