我有一个托管在www.emenu.com上的零售应用程序。我的客户在他们的服务器上托管了一些网站,比如www.fastfood.com, www.freshlime.com等。他们的网站上有一个按钮,可以重定向到www.emenu.com。
- www.fastfood.com按钮点击重定向到www.emenu.com
- www.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]
但是这个方法行不通。
网站的工作方式是这样的:
-
用户在浏览器中输入URL(或点击链接到达那里),例如
www.example.com/foo/bar
-
浏览器/操作系统查找
www.example.com
的A或AAAA DNS记录,该DNS记录指向IP地址 -
浏览器向该IP地址发送HTTP请求,如:
GET /foo/bar HTTP/1.1 Host: www.example.com
-
服务器在该IP地址(希望)响应一些HTML
所以你看,如果域www.example.com
已经指向你的客户端的服务器,它也不能指向你的服务器。浏览器地址栏中的URL总是会显示当前正在加载的URL,你不能屏蔽它。如果您希望站点的内容出现在客户端的域名上,那么该域名的DNS记录所指向的服务器实际上需要返回您站点的HTML。这里有两个选项:
-
将您的网站嵌入到客户端页面的iframe中。假设
www.example.com/emenu.html
包含:<iframe src="http://www.emenu.com"></iframe>
然后访问
www.example.com/emenu.html
的访问者将看到您网站的内容(嵌入到您的客户端网站中)。 -
为
www.example.com
设置web服务器来反向代理(部分)您的url。在Apache中,可以这样做:ProxyPass "/emenu" "http://www.emenu.com/" ProxyPassReverse "/emenu" "http://www.emenu.com/"
对于URL路径
/emenu
到www.example.com
的任何HTTP请求都将由该服务器转发到您的服务器,并且将响应呈现给访问者,就好像www.example.com
服务器自己生成了它一样。