Использование mod_rewrite для проксирования
Этот документ дополняет mod_rewrite справочную документацию. В нём описано, как использовать флаг [P] директивы RewriteRule для проксирования содержимого на другой сервер. Здесь приведено несколько рецептов для распространённых сценариев.
Проксирование содержимого с помощью mod_rewrite
- Описание:
-
mod_rewrite предоставляет флаг [P], который позволяет передавать URL-адреса на другой сервер через mod_proxy. Здесь приведены два примера. В одном URL-адрес напрямую передаётся на другой сервер и обслуживается так, как если бы это был локальный URL-адрес. В другом примере мы проксируем отсутствующее содержимое на внутренний сервер.
- Решение:
-
Чтобы просто сопоставить URL-адрес с другим сервером, используем флаг [P] следующим образом:
RewriteEngine on RewriteBase "/products/" RewriteRule "^widget/(.*)$" "http://product.example.com/widget/$1" [P] ProxyPassReverse "/products/widget/" "http://product.example.com/widget/"
Во втором примере мы проксируем запрос, только если не можем найти ресурс локально. Это может быть очень полезно при переносе с одного сервера на другой, когда вы не уверены, перенесено ли уже всё содержимое.
RewriteCond "%{REQUEST_FILENAME}" !-f RewriteCond "%{REQUEST_FILENAME}" !-d RewriteRule "^/(.*)" "http://old.example.com/$1" [P] ProxyPassReverse "/" "http://old.example.com/" - Обсуждение:
-
В каждом случае мы добавляем директиву
ProxyPassReverse, чтобы перенаправления, отправленные внутренним сервером, корректно передавались клиенту.По возможности используйте
ProxyPassилиProxyPassMatchвместо mod_rewrite.
© 2018 The Apache Software Foundation
Licensed under the Apache License, Version 2.0.
https://httpd.apache.org/docs/2.4/en/rewrite/proxy.html