如何才能拥有通配符目录代理?
我已经掌握了基础知识,但问题是,它给出了我所在的目录,即我的 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| ......