Мне нужно создать RewriteRule
, чтобы делегировать путь URL, например /tdg/image.jpg?mode=crop&width=300&height = 300
на локальный прокси.
Прокси-сервер должен преобразовать данный URL в следующий формат.
http://localhost:8888/unsafe/300x300/smart/tdg/image.jpg
Сначала я попробовал использовать директиву apache ProxyPassMatch
, но не могу получить ширину и данные о высоте из строки запроса.
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
И в обоих случаях URL-адрес результата для прокси-сервера: http: // localhost: 8888 / unsafe / x / smart / $ 1
, где должно быть http: // localhost: 8888 / unsafe / 300x300 / smart / tdg / image.jpg
Понятия не имею, почему я не могу получить значение ширины
и высоты
из строки запроса, используя синтаксис регулярного выражения group
.
Директива 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
.