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

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,由于代理 URL 中包含 /test/,因此出现 404 错误,我该如何修复该问题?

编辑:我想要实现的是不包含前面的 URL,并使其表现得像通过domain.tld/image.png而不是通过访问domain.tld/test/image.png

答案1

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

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

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

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

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

更新#1:除上述内容外,您还需要更改前面的“无目录”块,以使其确实匹配目录。目前,它匹配整个 URL 路径(即目录),因此第二条规则甚至没有被处理...

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

改成:

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

更新#2:^要处理(并忽略)任何级别的子目录,只需从上面删除字符串锚点的开头(即)RewriteRule 图案。 例如:

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

相关内容