我需要创建一个像本地代理RewriteRule
一样的 URL 路径。/tdg/image.jpg?mode=crop&width=300&height=300
代理需要将给定的 URL 转换为以下格式。
http://localhost:8888/unsafe/300x300/smart/tdg/image.jpg
我首先尝试使用ProxyPassMatch
apache 指令,但无法从查询字符串中检索宽度和高度数据。
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
和值。height
group
答案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
。