如何配置.htaccess实现域名别名到主域名指定页面的正确重定向?
解决方案
咱们先拆解下你现有配置里的问题:
- 第一条规则的跳转目标只写了
/pirate-golf,没有指定主域名,所以请求会留在domainalias.co.uk这个域名下的对应路径,而不是跳转到主域名的页面。 - 第二条规则把主域名下的
/pirate-golf又重定向回别名域名,直接造成了重定向循环,这就是为什么目标页面无法正常访问的原因。
根据你的需求,只需要配置别名域名到主域名特定页面的单向重定向即可,不需要反向规则。下面是正确的.htaccess配置:
# 将域名别名(含www前缀)重定向到主域名的特定页面 RewriteCond %{HTTP_HOST} ^(www\.)?domainalias\.co.uk$ [NC] # 可选:排除已匹配目标路径的请求,避免潜在循环(这里因为跳转目标是主域名,实际循环概率极低,但加上更稳妥) RewriteCond %{REQUEST_URI} !^/pirate-golf [NC] RewriteRule ^(.*)$ https://www.maindomain.co.uk/pirate-golf [L,R=301,NE]
规则说明:
RewriteCond %{HTTP_HOST} ^(www\.)?domainalias\.co.uk$ [NC]:匹配所有访问domainalias.co.uk或www.domainalias.co.uk的请求,[NC]标识不区分大小写。RewriteCond %{REQUEST_URI} !^/pirate-golf [NC]:跳过请求路径已经是/pirate-golf的情况,防止意外的循环问题。RewriteRule ^(.*)$ https://www.maindomain.co.uk/pirate-golf [L,R=301,NE]:将所有匹配的请求**永久重定向(301)**到主域名的/pirate-golf页面;[L]表示这是当前匹配的最后一条规则,[NE]表示不转义URL中的特殊字符。
注意事项:
- 测试前务必清空浏览器缓存,因为301重定向会被浏览器持久缓存,旧的错误规则可能影响测试结果。
- 如果你的
.htaccess里还有其他Rewrite规则,请把这条规则放在最前面,避免被其他规则拦截。 - 确认你的服务器已经启用了
mod_rewrite模块(大多数Apache主机默认已启用)。
内容的提问来源于stack exchange,提问作者Craig
相关产品推荐
相关产品推荐

