Apache RewriteRule на VirtualHosts не работает с регулярным выражением группового захвата

Мне нужно создать 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 .

2
задан 17 October 2017 в 19:29
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 .

3
ответ дан 3 December 2019 в 10:34

Теги

Похожие вопросы