.htaccess移动端重定向触发无限循环,求解决方案
解决移动端重定向无限循环问题
嘿,我来帮你搞定这个无限循环的坑!
问题原因
你的重定向规则没有排除已经跳转到mobile.html的请求——当移动端用户第一次被重定向到mobile.html后,这个新请求依然满足两个触发条件:
- 没有
desktop查询参数 - 请求来自移动端UA
所以规则会反复触发,导致URL里不断叠加mobile.html,形成无限循环。
修正后的代码
我帮你调整了规则,添加了排除目标页面的条件,同时去掉了重复的配置项,还修正了URL里多余的斜杠:
RewriteEngine On # 排除带有desktop参数的请求(支持用户切换回桌面版) RewriteCond %{QUERY_STRING} !^desktop # 排除已经是mobile.html的请求,终止循环 RewriteCond %{REQUEST_URI} !^/mobile.html # 匹配移动端用户代理 RewriteCond %{HTTP_USER_AGENT} "android|blackberry|googlebot-mobile|iemobile|iphone|ipod|opera mobile|palmos|webos" [NC] # 重定向到移动端页面,修正了多余的斜杠 RewriteRule ^ http://logo.artliner.co.il/mobile.html%{REQUEST_URI} [R,L]
关键说明
RewriteCond %{REQUEST_URI} !^/mobile.html:这个条件是核心,它告诉服务器「如果当前请求的路径不是以/mobile.html开头,才执行重定向」,彻底避免了对移动端页面本身的重复跳转。- 去掉了代码里重复的
RewriteEngine On(配置一次就足够生效),还把//mobile.html改成/mobile.html,让URL更规范。 - 保留了
%{REQUEST_URI},这样用户原来访问的路径会被附加到mobile.html后面,方便移动端页面处理不同的请求内容。
额外优化建议
如果需要明确指定重定向类型,可以把[R,L]改成[R=302,L](临时重定向,默认就是302,明确写出来更清晰);如果以后确定移动端页面是永久的,可以换成[R=301,L](永久重定向)。
内容的提问来源于stack exchange,提问作者חיים בניסטי
相关产品推荐
相关产品推荐

