3

У меня есть устаревшее программное обеспечение, которое не будет обновляться, и я не могу его изменить, который вызывает конкретный URL-адрес для получения информации. Однако этот URL впоследствии изменился и больше не возвращает рабочий результат. Вот пример:http://subdomain1.domain.com/sub1/sub2/sub3/[NUMBER]

Их текущая структура:http://subdomain2.domain.com/sub4/[NUMBER]

Насколько я понимаю, HOSTS основан только на IP. Могу ли я заставить что-либо, вызывающее первый пример, вернуть второй пример?

Спасибо

2 ответа2

3

Как вы говорите, с hosts вы можете контролировать только IP, но поскольку новый URL является еще одним поддоменом, мы можем комбинировать использование hosts с локальным веб-сервером для перезаписи URL. Обратите внимание, что этот обходной путь требует, чтобы приложение использовало браузер или другой компонент, который следит за перенаправлением URL.

Я собираюсь использовать ванильную установку Apache, поскольку нам не нужен PHP или БД, но если вы хотите, вы можете использовать дистрибутив, такой как XAMPP. Шаги:

  • Скачайте Apache ZIP от Apachehaus, я использовал 32-битную версию VC11. Обратите внимание, что для этой версии требуется распространяемый Visual C++ 2012, скачайте и установите его, если он еще не установлен (если вы используете другую версию, вам потребуется соответствующая версия распространяемого C++).

  • Извлеките содержимое в ZIP в папке, я собираюсь использовать C:\Apache но вы можете использовать другую папку, просто используйте эту папку на следующих шагах.

  • Перейдите в C:\Apache\Apache24\conf и откройте httpd.conf в текстовом редакторе и внесите следующие изменения:

    • Найдите « Define SRVROOT "/Apache24" и замените его на Define SRVROOT "C:\Apache\Apache24" , это сообщит Apache, где он установлен.
    • Найдите #LoadModule rewrite_module modules/mod_rewrite.so и удалите начальный # , при этом загружается модуль перезаписи URL.
    • Найдите DocumentRoot "${SRVROOT}/htdocs" через несколько строк после того, как вы увидите AllowOverride None , замените его на AllowOverride All , это позволит перезаписать URL.
  • Вы можете запустить Apache вручную, перейдя в C:\Apache\Apache24\bin и httpd.exe , но его удобнее установить как сервис. Для этого откройте cmd.exe , перейдите в эту папку и выполните httpd.exe -k install . После установки службы вы можете запустить / остановить ее с помощью инструмента администрирования «Службы» на панели управления (ее необходимо запустить в первый раз после установки, затем она будет автоматически запущена в Windows).

  • Проверьте, что сервер работает, откройте http://localhost , он покажет страницу приветствия, если работает правильно. Если сервер не запускает запуск вручную из командной строки, он выведет сообщение об ошибке, препятствующее его запуску (например, если вы указали неверный путь в ServerRoot).

  • Создайте новый файл в своем текстовом редакторе и сохраните его как .htaccess (обратите внимание на начальную точку) в папке C:\Apache\Apache24\htdocs , в этот файл необходимо поместить следующее (измените домен и подпапку на настоящую из них):

    RewriteEngine on
    RewriteRule ^sub1/sub2/sub3/(.*)$ http://subdomain2.domain.com/sub4/$1 [R]
    
  • Наконец, отредактируйте файл hosts Windows и добавьте следующую строку:

    127.0.0.1   subdomain1.domain.com
    

Вы можете проверить, работает ли перенаправление из браузера, если все прошло нормально, теперь, когда вы набираете http://subdomain1.domain.com/sub1/sub2/sub3/[anything], браузер будет перенаправлен на http://subdomain2 .domain.com/sub4/[что угодно].

Если вы хотите использовать этот обходной путь на нескольких компьютерах, вам не нужно устанавливать Apache на каждом из них. Предположим, что 192.168.0.10 - это IP-адрес компьютера с Apache, просто добавьте в файл hosts каждого компьютера:

192.168.0.10   subdomain1.domain.com

Обратите внимание, что вам нужно разрешить соединения с Apache в брандмауэре, по крайней мере, с локальной сетью.

0

Насколько я понимаю, HOSTS основан только на IP. Могу ли я заставить что-либо, вызывающее первый пример, вернуть второй пример?

Простое решение состоит в том, чтобы настроить веб-сервер или другой прокси-сервер для прозрачного перезаписи URL-запросов для старой настройки на новую. Это может быть достигнуто с помощью Apache и mod_rewrite (как подробно описано в ответе @ alberto-martinez).

Я не единственный, кто использует этот инструмент и хотел бы развернуть решение, если это возможно, для других членов моей команды, которые, к сожалению, менее технически квалифицированы, чем я. В идеале мы хотели бы, чтобы решение было задано и забыто [.]

Поскольку вы также выразили желание избегать файлов хостов (хотя, возможно, по более техническим причинам), вы можете рассмотреть возможность использования решения DNS в сочетании с Apache.

По сути, это было бы дополнительное локальное перенаправление (через DNS) subdomain1.domain.com на сервер, на котором находится Apache (или любой другой). Поскольку люди, использующие программное обеспечение, были подключены к этому DNS-серверу, не было бы необходимости изменять файл hosts на каждом компьютере.

Предостережения

  • Вы должны быть конкретными об использовании subdomain1.domain.com. Если вы просто поместите запись для domain.com, это вызовет проблемы (так как subdomain2.domain.com также будет перехвачен).

  • Если вы использовали это решение, вам, возможно, придется настроить правило перезаписи (я столкнулся с проблемами, но согласно любезным комментариям Альберто, это, кажется, основано на методологии тестирования / пользовательской ошибке).

  • Существуют потенциальные последствия для безопасности при клонировании общедоступных доменов верхнего уровня (например, .com) и, возможно, в большей степени при использовании активного домена, поэтому вам может потребоваться провести некоторые исследования перед развертыванием аналогичного решения.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .