mod-rewrite:在多个目录中查找文件

这是一个有趣的问题:

我试图将系统上的几个文件分成许多包,并且能够在不明确指定文件所在的包的情况下访问它们。

下面是一个例子:说一个文件/package1/one.htm/package1/package2/two.htm/package2 。 使用下面的configuration,我将能够直接访问它们,例如。 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] 

问题是我希望能够添加更多的包,而不更新这个Apacheconfiguration文件(并且不必重新启动Apache)。 我正在想的是:

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

但是,不幸的是,上面的代码不起作用,因为从RewriteCond(.*) )中找不到匹配,然后将其应用到RewriteRule 。 至less这是我的理解。

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

使用编程式的RewriteMap :

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

然后在你的脚本中,取出你想要的任何部分的请求path,遍历你的目录,然后返回适当的重写string。