使用 mod_rewrite 在不同的、不连续的文件夹中搜索文件或目录

问题描述

我正在尝试创建一组 mod_rewrite 规则来搜索文件或目录的一系列路径; 如果在第一条路径上找不到“东西”,请尝试第二条、第三条等我已经 在网上找了其他的例子,但它们似乎都有一个非常简单的树结构, 例如 path/dir1 path/dir2 path/dir3,它们在其中添加或替换单个元素 在路径中。我需要遍历的路径结构不是那么简单,而且是我无法控制的。

所以“东西” - 可以是目录或离散文件 - 可以在任意数量的位置

%{DOCUMENT_ROOT}/this/is/the/first/path/thing
%{DOCUMENT_ROOT}/a/second/path/emerges/thing
%{DOCUMENT_ROOT}/then/there/is/a/third/path/thing
%{DOCUMENT_ROOT}/omg/we/have/another/path/to/look/at/thing

这是迄今为止最成功的尝试;我在虚拟主机部分有这个

RewriteEngine On
LogLevel alert rewrite:trace8

# default pass-through case
RewriteCond   %{DOCUMENT_ROOT}/%{REQUEST_FILENAME} -f
RewriteRule   (.*) %{DOCUMENT_ROOT}/$1 [L]

# I tried adding this rule
RewriteCond   %{DOCUMENT_ROOT}/a/second/path/emerges/thing/%{REQUEST_URI} -f
RewriteRule  (.*)/this/is/the/first/path/thing(.*) $1//a/second/path/emerges/thing/$2 [L]

但是 RewriteCond 将第一条路径连接到第二条路径上,当然找不到,例如 /a/second/path/emerges//this/is/the/first/path/

我知道 %{REQUEST_FILENAME} 包含整个文件系统路径,而 REQUEST_URI 包含路径 没有 DOCUMENT_ROOT。我想弄清楚的是如何使用字符串创建 RewriteCond 语句 其中“/this/is/the/first/path/thing”被替换为“/a/second/path/emerges/thing”作为条件。 在 sed 中,我会做一些类似 s%/this/is/the/first/path/thing%a/second/path/emerges/thing%g 的事情,但我不知道怎么做,或者是否有办法, 作为 RewriteCond 语句的一部分执行此操作。我这里的逻辑是测试文件是否存在于后续路径中, 如果是,则重写 URL 并停止处理规则

我尝试使用第二条规则的否定条件编写规则,例如

RewriteCond   %{DOCUMENT_ROOT}/%{REQUEST_FILENAME} ! -f
RewriteRule  (.*)/this/is/the/first/path/thing(.*) $1//a/second/path/emerges/thing/$2 [L]

它有点工作,但有很多意想不到的副作用,例如当我尝试浏览第一个目录时, 我总是被重定向到第二个目录,永远无法回到第一个

有没有办法做到这一点,或者我是否需要取消这个计划并以完全不同的方式攻击它?

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)