首页 > 解决方案 > 重定向到另一个 URL 后显示上一个 URL

问题描述

我有一个托管在www.emenu.com的零售应用程序。我的客户在他们的服务器上托管的网站上,比如www.fastfood.comwww.freshlime.com等。他们的网站上有一个按钮可以重定向到www.emenu.com

问题是客户端在重定向后不想在地址栏中显示我的应用程序 URL。即,www.fastfood.com将重定向到www.emenu.com,但它应该在 URL 中显示www.fastfood.com 。

我正在使用 laravel 进行开发。遇到了许多涉及 .htaccess 的解决方案,例如

Options +FollowSymLinks -MultiViews
RewriteEngine On
RewriteBase /

RewriteCond %{HTTP_HOST} ^(www\.)?emenu\.come$ [NC]
RewriteRule ^ http://www.fastfood.com%{REQUEST_URI} [L,NE,P]

但解决方案不起作用。

标签: apachedns

解决方案


网站的工作方式是这样的:

  • 用户在浏览器中输入 URL(或单击链接到达那里),比如说www.example.com/foo/bar

  • 浏览器/操作系统查找 A 或 AAAA DNS 记录www.example.com,此 DNS 记录指向 IP 地址

  • 浏览器向该 IP 地址发送 HTTP 请求,例如:

    GET /foo/bar HTTP/1.1
    Host: www.example.com
    
  • 该 IP 地址的服务器(希望)以一些 HTML 响应

所以你看,如果域www.example.com已经指向你客户的服务器,它就不能也指向你的服务器。并且浏览器地址栏中的 URL 将始终显示它当前实际加载的 URL,您无法屏蔽它。如果您希望站点的内容出现在客户端的域名上,那么该域的 DNS 记录所指向的服务器实际上需要返回您站点的 HTML。你几乎有两个选择:

  1. 将您的网站嵌入到客户页面上的 iframe 中。说www.example.com/emenu.html包含:

    <iframe src="http://www.emenu.com"></iframe>
    

    然后访问者www.example.com/emenu.html将看到您网站的内容(嵌入到您客户的网站中)。

  2. 设置 Web 服务器www.example.com以反向代理(部分)您的 URL。在 Apache 中,可以通过以下方式完成

    ProxyPass "/emenu"  "http://www.emenu.com/"
    ProxyPassReverse "/emenu"  "http://www.emenu.com/"
    

    /emenu任何对 URL 路径的HTTP 请求www.example.com都将由该服务器转发到您的服务器,并将响应呈现给访问者,就好像www.example.com服务器自己生成了它一样。


推荐阅读