求助:.htaccess实现非www域名全路径301重定向至www首页
非www域名全路径301重定向到www首页解决方案
问题背景
需将所有指向https://website.com(含任意子路径,如https://website.com/anything/anything.anything)的请求,通过301永久重定向到https://www.website.com首页,以传递外链权重,同时避免重定向循环问题。
原代码错误分析
你提供的代码存在以下问题,导致重定向循环:
- 错误使用
%{REQUEST_URI}判断完整域名:%{REQUEST_URI}仅匹配请求路径部分(如/xxx/xxx),无法识别域名,导致已在www.website.com下的请求仍触发重定向。 - 拼写错误:规则中
webiste应为website。 - 使用临时重定向
R=302:不符合传递外链权重的需求,需改为R=301。
正确解决方案代码
将以下代码替换原有内容,写入.htaccess文件:
RewriteEngine On # 匹配非www的HTTPS域名请求,统一重定向到www首页 RewriteCond %{HTTP_HOST} ^website\.com$ [NC] RewriteRule ^(.*)$ https://www.website.com [R=301,L]
代码说明
%{HTTP_HOST} ^website\.com$ [NC]:精准匹配非www的主域名,[NC]忽略大小写,兼容各类大小写域名请求。RewriteRule ^(.*)$:匹配所有请求路径(包括根路径和任意子路径)。R=301:标记为永久重定向,确保搜索引擎传递外链权重;L表示执行完此规则后停止后续规则解析,避免冲突。
可选:保留IP白名单测试规则
如果需要指定IP跳过重定向(方便自身测试),可添加白名单规则:
RewriteEngine On # 允许指定IP跳过重定向(替换为你的实际IP) RewriteCond %{REMOTE_HOST} ^000\.000\.000\.000$ RewriteRule ^ - [L] # 非www重定向到www首页 RewriteCond %{HTTP_HOST} ^website\.com$ [NC] RewriteRule ^(.*)$ https://www.website.com [R=301,L]
注意事项
- 确保服务器已启用
mod_rewrite模块(Apache环境)。 - 测试前清除浏览器缓存(301重定向会被浏览器持久缓存)。
- 若使用Nginx环境,对应配置为:
server { listen 443 ssl; server_name website.com; # SSL证书配置(省略) return 301 https://www.website.com$request_uri; }
内容的提问来源于stack exchange,提问作者Daniel Šimberský
相关产品推荐
相关产品推荐

