Apache反向代理| 通配符目录重新路由(.htaccess)

怎么可能有一个通配符目录代理?

我已经得到了基本的,但问题是,它给出了我的目录,我的htaccess文件:

RewriteEngine on RewriteCond %{REQUEST_URI} !(u|api|fonts|images|css|js) [NC] # No directory RewriteRule ^(.*)\.(jpg|gif|png|txt|mp4|mp3|json|js|zip|bmp|tiff|webp|webm|raw|psd|jpeg|jpe|wav)(.*) http://127.0.0.1:9000/owoapi/$1.$2$3?%{QUERY_STRING} [proxy] # One Directory RewriteRule ^([^/]+)/(.*)\. (jpg|gif|png|txt|mp4|mp3|json|js|zip|bmp|tiff|webp|webm|raw|psd|jpeg|jpe|wav) (.*) http://127.0.0.1:9000/owoapi/$1.$2$3?%{QUERY_STRING} [proxy] 

当访问domain.tld/image.png ,它工作得很好。

当访问domain.tld/test/image.png ,404代码是由于它包含/ test /在代理URL中,我该如何解决这个问题呢?

编辑:我试图实现的是不包括前面的URL,并使其行为像它被访问通过domain.tld/image.png而不是domain.tld/test/image.png

 # One Directory RewriteRule ^([^/]+)/(.*)\. ...... 

只需在第一个捕获的模式周围移除大括号(因为您不需要捕获这个组):

 RewriteRule ^[^/]+/(.*)\. ...... 

请注意,这只能处理一个子目录段(我认为是这个意图)。

或者,您可以将反向引用从$1.$2$3更改$2.$3$4

更新#1:除上述之外,您将需要更改前面的“无目录”块,以便它确实匹配没有目录。 现在,它匹配整个URLpath(即目录),所以第二条规则甚至没有被处理…

 # No directory RewriteRule ^(.*)\.(jpg|gif| ...... 

改成:

 RewriteRule ^([^/]+)\.(jpg|gif| ...... 

更新#2:处理(和忽略)任何级别的子目录,只需从上面的RewriteRule 模式中删除string锚(即。 ^ )的开始。 例如:

 RewriteRule ([^/]+)\.(jpg|gif| ......