如何用Indy的TIdHTTPServer组件替换浏览器URL?

时间:2018-12-20 02:16:56

标签: delphi indy

我有一个使用TIdHTTPServer组件的Indy HTTP服务器。我希望使用URL Rewrite模块像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时,它会像https://www.mydomain2.com/www.domain1.com一样附加到当前URL。

我的理解是,由于安全问题,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');

我找不到解决方法。

1 个答案:

答案 0 :(得分:4)

服务器端执行此操作的唯一方法是指示客户端请求新的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而不是DISPLAY https://www.mydomain1.com,则只能通过操纵浏览器地址栏的客户端脚本来完成。