mod-rewrite:在多个目录中定位文件

mod-rewrite:在多个目录中定位文件

这是一个有趣的问题:

我试图将系统上的几个文件分成多个包,并且能够访问它们,而无需明确指定文件位于哪个包中。

举个例子:假设一个文件/package1/one.htm在 中/package1,并且/package2/two.htm在 中/package2。通过下面的配置,我将能够直接访问它们,例如。http://localhost/one.htm

RewriteCond %{DOCUMENT_ROOT}/package1%{REQUEST_URI} -f
RewriteRule ^(.*) /package1$1 [L]

RewriteCond %{DOCUMENT_ROOT}/package2%{REQUEST_URI} -f
RewriteRule ^(.*) /package2$1 [L] 

RewriteCond %{DOCUMENT_ROOT}/package3%{REQUEST_URI} -f
RewriteRule ^(.*) /package3$1 [L]

问题是我希望能够添加更多软件包,而无需更新此 Apache 配置文件(也不必重新启动 Apache)。我当时想的是:

RewriteCond %{DOCUMENT_ROOT}/package(.*)%{REQUEST_URI} -f
RewriteRule ^(.*) /package%1$1 [L]

但不幸的是,上面的代码不起作用,因为不可能从RewriteCond(.*))中获取匹配项,然后将其应用于RewriteRule。至少这是我的理解。

你能想出一个有创意的方法来解决这个问题吗?

答案1

使用程序化重写映射

RewriteMap rewriter prog:/path/to/script
RewriteRule ^(.*) %{rewriter:$1} [L]

然后在脚本中,获取所需的请求路径的任何部分,遍历目录,并返回适当的重写字符串。

相关内容