Мы используем локальный веб-сервер в качестве прокси и кеша, чтобы ускорить доступ к нескольким CMS одного типа. Поэтому мы кэшируем статические файлы (в специальной папке), перенаправляя все остальные запросы без изменений, чтобы сохранить сеанс и механизм отслеживания CMS, использованный в исходном запросе.
К сожалению, в Apache 2.4 порядок обработки операторов прокси и правил перезаписи, по-видимому, отличается от Apache 2.2.
В Apache 2.2 мы использовали это в файле VirtualHosts:
<VirtualHost *:80>
DocumentRoot "C:/Program Files (x86)/Apache Software Foundation/Apache2.2/htdocs"
ServerName localserver.net
RewriteEngine on
# Local Content
ProxyPassMatch ^/cms/content/(.*)$ http://localserver.net/localstorage1/$1
# fetch a file using a PHP script which checks if the file is available locally, if not the PHP fetches it from cmsserver.net
RewriteCond %{DOCUMENT_ROOT}/$1$2$3$4 !-f
RewriteCond %{DOCUMENT_ROOT}/localapplicationserver/localcache/index.php -f # ignore the file with the caching mechanism
RewriteRule \/(localstorage1\/)\(.*\)\/([^\/]*\/)([^\/]*\/)(.*) /localapplicationserver/localcache/index.php # redirect the to the caching mechanism php
RewriteCond %{DOCUMENT_ROOT}/$1$2$3$4 -f
RewriteRule \/(localstorage1\/)\(.*\)\/([^\/]*\/)([^\/]*\/)(.*) /$1$2$3$4
# Java Server :: CMS :: to keep session and tracking
<Location /cms>
ProxyPass https://cmsserver1.net/cms
ProxyPassReverse https://cmsserver1.net/cms
ProxyPassReverseCookieDomain localserver.net .cmsserver1.net
</Location>
</VirtualHost>
Хотя это не вызывает ошибки в Apache 2.4, похоже, что
ProxyPassMatch ^/cms/content/(.*)$
не применяется, когда срабатывают правила перезаписи (используется Apache 2.2). В журналах я вижу, что они применяются после обработки правил перезаписи, несмотря на то, что они находятся наверху в файле конфигурации. Поэтому условия никогда не выполняются, и механизм кеширования php никогда не вызывается.
Я попытался изменить правило перезаписи на
RewriteRule \/(/cms\/content/\/)\(.*\)\/([^\/]*\/)([^\/]*\/)(.*) /localapplicationserver/localcache/index.php
но тогда в механизме кеширования нам не хватает информации о CMS (чтобы сопоставить cmsserver1 с localstorage1).
Есть ли способ сохранить порядок обработки ProxyPassMatch и RewriteRule в Apache 2.2 с помощью Apache 2.4?
Большое спасибо и извините за эту стену текста ...