使用.htaccess实现目录重定向时遭遇重复内容及无限循环问题
子目录重定向与重复内容问题解决方案
需求梳理
- 根域名(www.example.com)展示
landing-page子目录内容 - 访问
www.example.com/landing-page时自动重定向到根域名,消除重复内容 - 保留
www.example.com/app路径的正常访问
修正后的.htaccess规则
RewriteEngine On # 处理直接访问/landing-page的请求,重定向到根目录 RewriteCond %{THE_REQUEST} ^[A-Z]{3,9}\ /landing-page(/[^\s]*)?\ HTTP/ RewriteRule ^landing-page/(.*)$ /$1 [R=301,L] # 将根目录及非指定路径请求转发到landing-page子目录 RewriteCond %{REQUEST_URI} !^/(landing-page|app) RewriteRule ^(.*)$ /landing-page/$1 [NC,L]
规则说明
- 第一条规则:通过
%{THE_REQUEST}捕获用户实际发起的HTTP请求(内部转发的请求不会触发此条件),匹配所有直接访问/landing-page开头的路径,用301永久重定向到根域名对应的路径,比如/landing-page/contact会重定向到/contact,避免重复内容。 - 第二条规则:排除
landing-page(防止内部转发引发循环)和app目录,将其他所有请求转发到landing-page子目录,实现根域名展示landing-page内容的同时,保证/app路径正常访问。
原方案问题分析
- 原RewriteRule仅实现了根目录到landing-page的转发,但未处理直接访问
/landing-page的请求,导致重复内容。 - 使用
Redirect指令会触发循环:用户访问/landing-page被重定向到根目录,根目录又被RewriteRule转发到/landing-page,形成无限循环。而通过%{THE_REQUEST}区分外部请求和内部转发,可彻底避免这个问题。
内容的提问来源于stack exchange,提问作者bad_programmer
相关产品推荐
相关产品推荐

