这是一个有趣的问题:
我试图将系统上的几个文件分成多个包,并且能够访问它们,而无需明确指定文件位于哪个包中。
举个例子:假设一个文件/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]
然后在脚本中,获取所需的请求路径的任何部分,遍历目录,并返回适当的重写字符串。