Перенаправление внешних веб-ресурсов на локальные файлы

Вопрос или проблема

Я пытаюсь перенаправить запросы из моего размещённого файла index.html, которые ссылаются на внешние JavaScript и CSS ресурсы, на локальные JS/CSS файлы на моем сервере. То есть, мой index.html запрашивает script.js с foobar.com:

<script type="text/javascript" src="https://foobar.com/foo/scripts/script.js"></script>

и мой index.html не размещен на foobar.com.

Я хочу, чтобы index.html запрашивал мой локальный /js/script.js вместо этого (не изменяя HTML файл).

Я попытался сделать это в .htaccess:

RewriteEngine On

# Перенаправить внешние запросы JavaScript на локальные файлы
RewriteCond %{REQUEST_URI} ^/foo/scripts/script\.js [NC,OR]
RewriteRule ^(.*)$ /js/$1 [L]

но это, похоже, не работает, index.html по-прежнему пытается получить доступ к script.js с https://foobar.com

Технически эти запросы не идут на мой сервер, так что возможно ли их поймать? Хотя они приходят из index.html, который размещен на моем сервере…

Технически эти запросы не идут на мой сервер, так что возможно ли их поймать? Хотя они приходят из index.html, который размещен на моем сервере…

Нет. Они никогда не достигают вашего сервера. То, что вы можете сделать, это использовать mod_substitute для замены строк в содержимом, которое вы отправляете. Обратите внимание, что это создаст довольно значительную дополнительную нагрузку на сервер, так как ему нужно будет фактически сопоставлять и выполнять замены.

Ответ или решение

Для перенаправления запросов внешних JavaScript и CSS-ресурсов на локальные файлы на вашем сервере, вы не можете использовать стандартные правила перенаправления в файле .htaccess, так как эти запросы идут напрямую к внешнему ресурсу и не проходят через ваш сервер. Однако есть возможность решить эту задачу с помощью модуля mod_substitute Apache, который позволяет заменять строки в содержимом, отправляемом клиенту.

Вот как можно реализовать замену URL внешних ресурсов на локальные с помощью mod_substitute:

  1. Убедитесь, что модуль модуль mod_substitute включен. Вы можете проверить это, выполнив команду в терминале вашего сервера (если у вас есть доступ):

    apache2ctl -M | grep substitute

    Если модуль не включен, добавьте его следующим образом:

    sudo a2enmod substitute
    sudo service apache2 restart
  2. Отредактируйте файл .htaccess для использования mod_substitute. Добавьте следующие строки в ваш файл .htaccess, который находится в корневом каталоге вашего сайта:

    AddOutputFilter SUBSTITUTE .html .htm
    Substitute "s|https://foobar.com/foo/scripts/script.js|/js/script.js|n"

    Здесь мы устанавливаем фильтр для обработки HTML-файлов и заменяем URL внешнего скрипта на путь к локальному файлу.

  3. Настройте сервер для обработки заголовков. Учтите, что замена происходит на уровне контента. Кроме того, убедитесь, что браузеры не кэшируют старые версии скриптов, чтобы избежать загрузки внешнего ресурса. Для этого можно добавить к заголовкам Cache-Control такие параметры:

    Header set Cache-Control "no-cache, no-store, must-revalidate"
    Header set Pragma "no-cache"
    Header set Expires "0"
  4. Проверьте правильность работы. После внесения изменений проверьте, что при загрузке вашего index.html запрос к https://foobar.com/foo/scripts/script.js заменяется на /js/script.js. Это можно сделать через инструменты разработчика в вашем браузере, в вкладке «Сеть» (Network).

Таким образом, с помощью модуля mod_substitute вы сможете перенаправить внешний ресурс на локальный файл, не изменяя сам index.html. Обратите внимание, что такая реализация может увеличить нагрузку на сервер, так как каждая страница будет обрабатываться для замены.

Оцените материал
Добавить комментарий

Капча загружается...