Я обычно вижу это сделано с mod_rewrite:
RewriteCond %{DOCUMENT_ROOT}/%{REQUEST_FILENAME} !-f
RewriteRule ^/(.*)$ balancer://app_cluster%{REQUEST_URI} [P,QSA,L]
Это означает, что «если файл не существует в файловой системе, прокси-сервер через мой кластер mod_proxy_balancer». В противном случае, если файл существует в файловой системе, он просто обслуживается Apache относительно определенного DocumentRoot
в вашем виртуальном хосте.
Но это не мой любимый способ, в основном потому, что для этого потребуется stat
системный вызов на запрос.
С mod_proxy вы можете использовать, ProxyPassMatch
если у вас достаточно новая версия Apache ( см. Документацию ). Такие как:
ProxyPassMatch \.(gif|jpe?g|css|js)$ !
Который использует! чтобы указать, что Apache не должен прокси-запросы, соответствующие этому регулярному выражению.
Если вы используете более старую версию Apache, вам будет ProxyPass
доступна директива, но она соответствует только префиксам URI (это мой текущий предпочтительный метод):
ProxyPass /images !
ProxyPass /stylesheets !
Конечно, если вы должны выполнить сопоставление с регулярным выражением, как вы упомянули выше, вы можете просто изменить правило mod_rewrite, которое я разместил сверху, чтобы отрицать совпадение с %{REQUEST_URI}
.
Надеюсь, это поможет!