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

如何使用htaccess去除URL中的多个文件夹名称?

解决方案

方案1:显式指定支持的文件夹(推荐)

这种方式性能高、不会产生误匹配,你只需要把你需要支持的food、health、beauty等文件夹都加到规则里即可,完整.htaccess代码如下:

<IfModule mod_rewrite.c>
RewriteEngine on

# 防止重写循环:已经在目标文件夹内的请求不处理
RewriteCond %{REQUEST_URI} ^/(food|health|beauty)/ [NC]
RewriteRule ^ - [L]

# 检查请求的文件是否在food文件夹下存在,存在则重写
RewriteCond %{DOCUMENT_ROOT}/food/$1 -f
RewriteRule ^(.*\.php)$ /food/$1 [L]

# 检查请求的文件是否在health文件夹下存在,存在则重写
RewriteCond %{DOCUMENT_ROOT}/health/$1 -f
RewriteRule ^(.*\.php)$ /health/$1 [L]

# 检查请求的文件是否在beauty文件夹下存在,存在则重写
RewriteCond %{DOCUMENT_ROOT}/beauty/$1 -f
RewriteRule ^(.*\.php)$ /beauty/$1 [L]

# 其余需要支持的文件夹按上面的格式依次添加即可
</IfModule>

规则逻辑说明:

  • 先过滤已经指向子文件夹的请求,避免循环重写
  • 按顺序检查根目录请求的php文件是否存在于对应子文件夹中,匹配到就直接内部重写到对应路径,用户端URL不会显示子文件夹名
  • 多个文件夹有同名文件时,排在前面的文件夹优先级更高,可以把访问量高的文件夹规则放在最前面提升性能

方案2:自动适配所有子文件夹(无需重复加规则)

如果后续会频繁新增需要隐藏的文件夹,不想每次修改重写规则,可以用自动探测逻辑,代码如下:

<IfModule mod_rewrite.c>
RewriteEngine on

# 防止重写循环
RewriteCond %{REQUEST_URI} /[^/]+/[^/]+\.php$ [NC]
RewriteRule ^ - [L]

# 自动遍历所有子文件夹查找匹配的php文件
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^([^/]+\.php)$ $1 [E=REQ_FILE:$1]
RewriteCond %{DOCUMENT_ROOT}/*/%{ENV:REQ_FILE} -f
RewriteRule ^[^/]+\.php$ /%1/%{ENV:REQ_FILE} [L]
</IfModule>

注意:该方案需要额外的文件存在检查,性能略低于方案1,且如果多个子文件夹下有同名文件,匹配结果不可控,更建议使用方案1。

生效验证

配置完成后,重载Apache配置,清除浏览器缓存后测试即可,原带文件夹路径的访问会自动隐藏文件夹名。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 00:36:05