Есть несколько способов добиться этого, и это зависит от того, из какого HTML-кода нужно извлечь эти URI. Если вы имеете дело только с изображениями, ссылками, таблицами стилей и другим специфическим импортом HTML, то вы можете попробовать подход, основанный на перенаправлении DNS. Я собираюсь предположить, что у вас есть доступ к некоторым дополнительным ресурсам, в частности к веб-серверу или сервлет-контейнеру, и у вас есть возможность управлять DNS на этом сервере.
Так что сначала разберите ваш документ при создании, чтобы извлечь все именованные хосты (или, если это просто конкретные хосты, поищите их). Затем используйте эти имена хостов (и порты, если они указаны) в качестве ключа для поиска в базе данных. Преобразование вашего имени хоста в уникальный код. Если вы не нашли запись для этого имени хоста, создайте ее и добавьте. В основном конвертируйте ваше имя хоста в представительный код. Теперь немного об обмане DNS. возьмите свой не сгенерированный код и добавьте его к некоторому DNS, который был настроен так, чтобы он указывал на ваш вышеупомянутый веб-сервер. Для этого вам нужно настроить DNS-символы . Итак, чтобы взять пример. Скажите, если ваш исходный контент выглядит так:
<p>Why is it that all my baking ends up on <a href="http://cakewrecks.blogspot.com/p/faq.html">the internet</a></p>
Вы извлекаете имя хоста cakewrecks.blogspot.com
. Найдите его в таблице преобразования и преобразуйте в типичный код, скажем, 11ag3
. Затем он добавляется к имени хоста веб-сервера, например 11ag3.content.mycompany.com
Теперь вы берете новое имя хоста и вставляете его обратно в ваш контент.
<p>Why is it that all my baking ends up on <a href="http://11ag3.content.mycompany.com/p/faq.html">the internet</a></p>
Далее вам нужно написать сервлет (или, возможно, какой-то другой динамический код). Для этого нужно перехватить любой входящий HTTP-запрос (все ваши запросы из вашего контента теперь должны попадать в этот сервлет, а не туда, куда они изначально отправлялись). Таким образом, сервлет получает запрос на
http://11ag3.content.mycompany.com/p/faq.html
Извлекает имя хоста 11ag3.content.mycompany.com
и из этого уникальный код 11ag3
. Теперь он делает обратное тому, что мы делали при создании документа, ищет исходное имя хоста и возвращает его обратно в запрос, тем самым восстанавливая http://cakewrecks.blogspot.com/p/faq.html
. Теперь он отвечает на запрос кодом состояния HTTP 300 (вероятно, 307, временное перенаправление) вместе с восстановленным URL.
Большим преимуществом здесь является то, что теперь у вас есть таблица базы данных, которая содержит все ваши имена хостов. Если вы хотите изменить источник контента, вы можете просто обновить соответствующую запись новым именем хоста. Кроме того, вы можете избежать накладных расходов на шаблонирование каждой страницы при каждой ее подаче.
Основной проблемой при таком подходе может быть флэш-память, которая имеет сложную модель безопасности. Возможно, вы сможете заставить его работать, углубившись в сложный мир междоменных политик хотя.