Как заменить URL-адрес браузера на компонент Indy TIdHTTPServer?

У меня есть HTTP-сервер Indy, использующий компонент TIdHTTPServer. Я хочу, чтобы URL-адрес браузера был переписан, как это делают Apache и IIS, используя модули перезаписи URL-адресов.

Например: если кто-то переходит на https://www.mydomain2.com, я хочу, чтобы URL-адрес в браузере отображал https://www.mydomain1.com.

Я почти уверен, что использование Javascript history.pushState - не ответ.

Я пробовал использовать Javascript history.pushState('data to be passed', 'Title of the page', '/www.mydomain1.com'); в качестве альтернативы. Однако, когда я перехожу к https://www.mydomain2.com, он добавляется к текущему URL-адресу, например, https://www.mydomain2.com/www.domain1.com.

Насколько я понимаю, history.pushState не допускает полную замену URL из-за проблем с безопасностью.

Заголовки моего сервера (а я просто снимаю в темноте):

aResponseInfo.CustomHeaders.AddValue('Access-Control-Allow-Origin','*');
aResponseInfo.CustomHeaders.AddValue('Access-Control-Allow-Methods','*');
aResponseInfo.CustomHeaders.AddValue('Access-Control-Allow-Headers',
  'Origin, X-Requested-With, Content-Type, Accept, Authorization');
aResponseInfo.CustomHeaders.AddValue('Cache-Control', 'no-cache');

У меня проблемы с поиском решения.

Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
2
0
457
1

Ответы 1

Единственный способ сделать это со стороны сервер - указать клиенту запросить новый URL. Для этой цели вы можете использовать метод TIdHTTPResponseInfo.Redirect(), например:

if ARequestInfo.Host = 'www.mydomain2.com' then
  AResponseInfo.Redirect('https://www.mydomain1.com');

Но обратите внимание, что клиент больше не будет НА https://www.mydomain2.com, вместо этого он перейдет к https://www.mydomain1.com.

Если вы хотите, чтобы клиент оставался на https://www.mydomain2.com, но отображал https://www.mydomain1.com, это можно сделать только с помощью сценария на стороне клиента, который манипулирует адресной строкой браузера.

Насколько я понимаю, из соображений безопасности нет способа выполнять сценарии на стороне клиента? Вы бы не знали, куда мне указать, чтобы узнать, как это можно сделать?

aknapple 20.12.2018 05:28

Реми, пока я пытаюсь найти решение, кажется, есть веская причина для желания выполнить перезапись URL. есть ли шанс, что это может быть доступно в будущей сборке Indy?

aknapple 20.12.2018 05:50

См. Как работает перезапись URL?. «Перенаправление» уже реализовано в Indy. «Перезапись» - нет, но ничто не мешает вам реализовать «перезапись» в ваших обработчиках OnCommand... сегодня, это просто вопрос того, как вы решите интерпретировать запрошенные URL-адреса. И нет, нет никаких планов, чтобы Indy реализовал для вас "Rewrite" в ближайшее время.

Remy Lebeau 20.12.2018 08:55

Другие вопросы по теме