VirtualHosts 上的 Apache RewriteRule 不适用于组捕获正则表达式

VirtualHosts 上的 Apache RewriteRule 不适用于组捕获正则表达式

我需要创建一个像本地代理RewriteRule一样的 URL 路径。/tdg/image.jpg?mode=crop&width=300&height=300

代理需要将给定的 URL 转换为以下格式。

http://localhost:8888/unsafe/300x300/smart/tdg/image.jpg

我首先尝试使用ProxyPassMatchapache 指令,但无法从查询字符串中检索宽度和高度数据。

ProxyRequests On
ProxyPreserveHost On
ProxyPassMatch ^\/(tdg.+\.(?:png|jpeg|jpg|gif))\?mode=crop.+width=(d+)&height=(d+) http://localhost:8888/unsafe/$2x$3/smart/$1

我也试过RewriteRule

RewriteEngine On
RewriteRule ^\/(tdg.+\.(?:png|jpeg|jpg|gif))\?mode=crop.+width=(d+)&height=(d+) http://localhost:8888/unsafe/$2x$3/smart/$1

在这两种情况下,代理的结果 URLhttp://localhost:8888/unsafe/x/smart/$1应该是http://localhost:8888/unsafe/300x300/smart/tdg/image.jpg

我不知道为什么我不能使用正则表达式语法从查询字符串中获取width和值。heightgroup

答案1

RewriteRule指令仅匹配路径部分,不包含查询字符串。尝试:

RewriteEngine On
RewriteCond %{QUERY_STRING} mode=crop.+width=(\d+)&height=(\d+)
RewriteRule ^\/(tdg.+\.(?:png|jpeg|jpg|gif)) http://localhost:8888/unsafe/%1x%2/smart/$1 [P]

注意使用 时替换中的反向引用的不同RewriteCond。为了使用来自 的反向引用,对 中的引用使用 %N RewriteCond,对 中的引用使用 $N RewriteRule

相关内容