.htaccess RewriteRule同域名重定向异常问题求助
.htaccess RewriteRule同域名重定向异常问题求助
嗨,我太懂你这种“跨域好好的,同域就全乱套”的崩溃感了!咱们来一步步拆解问题、解决它:
问题根源
你之前的Rewrite规则犯了两个关键错误:
- 没有精确匹配路径:比如
RewriteRule career ...这种写法,会匹配任何包含"career"字符串的URL——不管是/career本身,还是/career_by_education里的"career"片段,甚至重定向后的/career_by_education/careers-by-educational-level.php里也有"career",所以会被反复匹配,最后全跳到/career/career.php。 - 重定向循环隐患:同域重定向后,新的URL还会被当前.htaccess的规则再次处理,而跨域重定向后浏览器跳转到外部域名,不会触发当前规则,所以跨域时反而“正常”。
正确的.htaccess规则写法
要解决这个问题,核心是给规则加上精确匹配的正则锚定(^表示开头,$表示结尾),确保只匹配你指定的那几个根路径:
RewriteEngine On # 精确匹配 /career_by_education 路径 RewriteRule ^career_by_education$ /career_by_education/careers-by-educational-level.php [L,R=301] # 精确匹配 /international_careers 路径 RewriteRule ^international_careers$ /international_careers/international_careers.php [L,R=301] # 精确匹配 /major_careers 路径 RewriteRule ^major_careers$ /major_careers/academic_major_careers.php [L,R=301] # 精确匹配 /career 路径 RewriteRule ^career$ /career/career.php [L,R=301]
额外注意事项
- 用
R=301(永久重定向)代替单纯的R,对SEO更友好;如果只是测试阶段,可以用R=302(临时重定向),避免浏览器缓存重定向规则。 - 测试前一定要清空浏览器缓存!尤其是之前用过301重定向的话,浏览器会缓存旧规则,导致新规则不生效。
- 确保你的服务器允许使用.htaccess(Apache配置里要设置
AllowOverride All),否则规则会被忽略。
备注:内容来源于stack exchange,提问作者Ralph_J
相关产品推荐
相关产品推荐

