You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Apache.htaccess重写URL实现路径隐藏后旧URL仍可访问如何解决?

问题原因

你遇到的无限循环是因为两条规则冲突:

  • 你添加的旧路径转新路径的重定向规则,会把/blog/mynewpage 301跳转到/mynewpage
  • 原来的内部重写规则,又会把/mynewpage在服务端内部转发到/blog/mynewpage
    两条规则循环触发,就会出现重定向次数过多的报错。
解决方案

核心是通过THE_REQUEST服务器变量区分「用户主动请求旧路径」和「服务端内部重写跳转的旧路径」:THE_REQUEST存储的是浏览器发送的原始请求内容,服务端内部重写时不会修改这个变量,所以可以作为判断依据。

你需要调整规则的顺序,把重定向规则放在内部重写规则之前,完整规则如下:

# 第一条:拦截用户直接访问旧路径的请求,301跳转到新路径
RewriteCond %{THE_REQUEST} ^[A-Z]{3,9}\ /blog/mynewpage/ [NC]
RewriteRule ^blog/mynewpage/$ /mynewpage/ [R=301,L]

# 第二条:原来的内部重写规则,保持不变
RewriteRule ^mynewpage/$ /blog/mynewpage/ [L]
通用扩展(可选)

如果你后续有多个页面需要做同样的映射,不需要逐个写规则,可以直接用通用规则适配所有/blog下的内容:

# 所有用户直接访问/blog/xxx的请求,都跳转到/xxx
RewriteCond %{THE_REQUEST} ^[A-Z]{3,9}\ /blog/([^\ ]*) [NC]
RewriteRule ^blog/(.*)$ /$1 [R=301,L]

# 所有根路径下不存在的静态文件/目录,都内部转发到/blog路径下匹配
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ /blog/$1 [L]

注意:修改规则后请清理浏览器缓存再测试,301永久重定向会被浏览器默认缓存,未清理缓存可能会看到之前的错误跳转结果。

内容的提问来源于stack exchange,提问作者FbnKlmn

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.25 08:06:00