这是一个有趣的问题:
我试图将系统上的几个文件分成许多包,并且能够在不明确指定文件所在的包的情况下访问它们。
下面是一个例子:说一个文件/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。