如何解决使用 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 举报,一经查实,本站将立刻删除。