Назад | Перейти на главную страницу

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

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

И в обоих случаях URL-адрес результата для прокси-сервера http://localhost:8888/unsafe/x/smart/$1 где должно быть http://localhost:8888/unsafe/300x300/smart/tdg/image.jpg

Я понятия не имею, почему я не могу достать width и height значение из строки запроса, используя 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.