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

使用mod_rewrite隐藏子目录但保留访问文件的规则配置问题

解决mod_rewrite隐藏子目录保留文件的配置问题

你的需求是把www.mysite.com/product/admin/docs/info.php这类URL重写为www.mysite.com/product/info.php,也就是隐藏product之后到目标文件前的所有子目录,只保留product和最终文件名。原配置没生效是因为规则逻辑没抓对路径匹配与提取的要点,下面是修正后的配置:

#Redirection code starts
RewriteEngine On

# HTTPS和www跳转(这部分逻辑没问题,保留)
RewriteCond %{HTTPS} off [OR]
RewriteCond %{HTTP_HOST} !^www\. [NC]
RewriteCond %{HTTP_HOST} ^(?:www\.)?(.+)$ [NC]
RewriteRule ^ https://www.%1%{REQUEST_URI} [L,NE,R=301]

# 隐藏product后的子目录,仅保留目标文件
# 避免对直接访问product下的文件触发重写,防止循环
RewriteCond %{REQUEST_FILENAME} !-f
# 匹配product/后带多层子目录的路径,捕获最后一个文件名
RewriteRule ^product/.+/([^/]+)$ /product/$1 [L,NC]

配置说明:

  • 去掉了重复的RewriteEngine On,模块只需要开启一次
  • RewriteCond %{REQUEST_FILENAME} !-f:确保只对不存在于product目录下的请求路径生效,避免直接访问/product/info.php时触发不必要的重写
  • 正则^product/.+/([^/]+)$:精准匹配product/开头、包含至少一层子目录的路径,用捕获组提取最后一段文件名
  • 重写目标/product/$1:将路径替换为product/加上捕获到的文件名,NC忽略大小写,L终止后续规则执行

如果需要让浏览器地址栏显示重写后的URL(外部跳转),可以在RewriteRule的标记中添加R=301(永久跳转),示例:

RewriteRule ^product/.+/([^/]+)$ /product/$1 [L,NC,R=301]

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.26 00:07:08