![.htaccess 重写:如何删除除第一个和第二个之外的所有目录?](https://linux22.com/image/799251/.htaccess%20%E9%87%8D%E5%86%99%EF%BC%9A%E5%A6%82%E4%BD%95%E5%88%A0%E9%99%A4%E9%99%A4%E7%AC%AC%E4%B8%80%E4%B8%AA%E5%92%8C%E7%AC%AC%E4%BA%8C%E4%B8%AA%E4%B9%8B%E5%A4%96%E7%9A%84%E6%89%80%E6%9C%89%E7%9B%AE%E5%BD%95%EF%BC%9F.png)
我正在尝试完成特定的 .htaccess 重写,但是我的正则表达式技能限制了我这样做;
示例 1:www.domain.com/dir1/dir2/dir3/file.txt 应变为 www.domain.com/dir1/dir2/file.txt
示例 2:www.domain.com/dir1/dir2/dir3/dir4/file.txt 也应变为 www.domain.com/dir1/dir2/file.txt
示例 3:www.domain.com/dir1/dir2/dir3/dir4%2Ffile.txt 也应变为 www.domain.com/dir1/dir2/file.txt
等等。由于我事先不知道 dir2、dir3、dir4 等等是什么,所以可能应该使用正则表达式。另外,我事先不知道目录会有多深(是否会有 dir3、dir4 甚至 dir5)。还应该识别 Urlencoded 斜线。使用 php 来处理这个问题不是一个选择。
任何帮助将不胜感激!
答案1
要剥离第三个和后续目录:
RewriteRule ^/(dir1)/([^/]+)/(.+)/([^/]+)$ $1/$2/$4 [L]