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

如何用mod_rewrite实现仅新目录有对应文件时重定向旧URL?

mod_rewrite 实现旧URL跳转与新目录兼容方案

完全可以实现你的需求,在.htaccess中通过mod_rewrite规则就能完成逻辑判断,以下是具体配置:

RewriteEngine On

# 提取foo路径后的部分,存入环境变量OLD_PATH
RewriteRule ^foo/(.*)$ - [E=OLD_PATH:$1]

# 检查bar目录下对应的文件或目录是否存在
RewriteCond %{DOCUMENT_ROOT}/bar/%{ENV:OLD_PATH} -f [OR]
RewriteCond %{DOCUMENT_ROOT}/bar/%{ENV:OLD_PATH} -d
# 存在则301永久重定向到bar对应路径
RewriteRule ^foo/(.*)$ /bar/$1 [R=301,L]

规则拆解

  • 第一条规则:将请求路径中foo/之后的部分(比如subfoo/example.html)存入环境变量OLD_PATH,方便后续复用。
  • 两条RewriteCond:分别检查网站根目录下的bar/{OLD_PATH}是否为存在的文件(-f)或目录(-d),[OR]表示满足任一条件即可触发后续重写。
  • 第二条规则:当条件满足时,将原请求foo/xxx永久重定向到bar/xxx,R=301是永久重定向(利于搜索引擎更新索引),L表示执行完这条规则后停止后续规则处理。
  • 若bar下的对应资源不存在,规则不会触发,Apache会自动去新的foo目录下查找对应资源,符合你的需求。

注意事项

  • 确保Apache已启用mod_rewrite模块,且网站根目录的Apache配置中设置了AllowOverride All,否则.htaccess规则无法生效。
  • 测试阶段可以将R=301改为R=302临时重定向,确认逻辑正确后再换回永久重定向。
  • %{DOCUMENT_ROOT}指向Apache的网站根目录,确保路径拼接正确,避免因相对路径导致的检查错误。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.14 18:12:38