【问题标题】:htaccess redirect to external website without changing address barhtaccess 重定向到外部网站而不更改地址栏
【发布时间】:2013-09-09 14:33:15
【问题描述】:

我有一个名为的子域,比如说:

cloud.mygizmo.com

但是当有人导航到这个 URL 时,我希望他们真正去:

11.22.33.44/cloud

它位于与mygizmo.com 完全不同的主机上,无法移动。

在我的.htaccess 我有这个:

RewriteEngine on
# Use PHP5.4 as default
AddHandler application/x-httpd-php54 .php
RewriteCond %{HTTP_HOST} ^cloud\.mygizmo\.com$ [OR]
RewriteCond %{HTTP_HOST} ^www\.cloud\.mygizmo\.com$
RewriteRule ^/?$ "http\:\/\/11\.22\.33\44\/cloud" [L]

执行重定向,但仍会更改用户浏览器中的地址栏。

如果用户导航到cloud.mygizmo.com,我该如何做到这一点,他们实际上会转到11.22.33.44/cloud,但地址栏仍然显示cloud.mygizmo.com

【问题讨论】:

  • 我不是 DNS 专家,但您不能通过添加或修改 A 记录来实现吗?
  • @Tim:好吧,我不能添加一条 A 记录来指向一个文件夹,例如 11.22.33.44/cloud。但我想我可以将它指向11.22.33.44,然后在那里添加一个重定向。但是URL不会仍然更改为11.22.33.44吗?
  • 对不起,不知道。我只是把它扔在那里。我以前见过域这样做,我不记得它们是否是停放的域......例如,你会去 adobe.com 并被重定向到 adobe.com,但你的地址栏仍然显示 adobe.com。不幸的是,我不记得那叫什么了。这只是一个例子,伙计们,我知道 Adob​​e 不会那样做 - 不要激怒我 :)
  • @Tim:不过还是感谢您的建议。

标签: php apache .htaccess redirect


【解决方案1】:

你不能。重定向不起作用。

您可以改为代理数据(这会效率低下并增加您的带宽成本)。

【讨论】:

  • 我已经编辑了我的问题,使其不那么具体。我不在乎我是否使用重定向、代理或独角兽。我真的只是在寻找最终结果。
【解决方案2】:

如果你安装了 mod_proxy,你可以使用P 标志来代表浏览器进行反向代理:

RewriteEngine on
# Use PHP5.4 as default
AddHandler application/x-httpd-php54 .php
RewriteCond %{HTTP_HOST} ^cloud\.mygizmo\.com$ [OR]
RewriteCond %{HTTP_HOST} ^www\.cloud\.mygizmo\.com$
RewriteRule ^/?$ "http\:\/\/11\.22\.33\44\/cloud" [L,P]

您也可以使用 ProxyPassProxyPassMatch 进行反向代理,但这些只能在 vhost/server 配置中使用。

cloud.mygizmo.com/www.cloud.mygizmo.com vhost 你可以说:

ProxyPass / http://11.22.33.44/cloud

然后对cloud.mygizmo.com 的任何请求都会被代理到http://11.22.33.44/cloud 主机。

注意ProxyPassRedirect 类似,它将路径节点//cloud 链接在一起。所以如果有人要去:

http://cloud.mygizmo.com/foo/bar

他们会被反向代理到:

http://11.22.33.44/cloud/foo/bar

如果这不是你想要的,那么使用ProxyPassMatch:

ProxyPassMatch ^/$ http://11.22.33.44/cloud

或者,如果您希望重写规则以相同的方式运行,您需要捕获请求 URI 并将其通过反向引用传递给目标:

RewriteRule ^/?(.*)$ http://11.22.33.44/cloud/$1 [L,P]

【讨论】:

  • 这听起来很完美。我真的不在乎我是否使用重定向、代理或洒水——我真的只对最终结果感兴趣。当您说“在 [...] 虚拟主机中您可以说...”时,您是指在 cloud.mygizmo.com 上的 .htaccess 文件中吗?
  • @JohnDibling 通过虚拟主机配置,我的意思是定义站点“cloud.mygizmo.com”的配置文件,而不是 htaccess 文件(不允许使用 ProxyPass 指令)。
  • 啊。唔。我不知道我是否可以访问它。这是一个托管在 bluehost 的网站。
  • @JohnDibling 可能不会,您必须使用 mod_rewrite 和 P 标志。但可能是 Bluehost 根本没有加载 mod_proxy。如果P 标志没有做任何事情(例如,它重定向而不是代理,或者什么都不做),那么 mod_proxy 没有加载,你必须通过 php 或其他东西使用脚本代理。
【解决方案3】:

可能不是理想的解决方案,但您可以构建一个几乎是巨大 iframe 的页面并在 iframe 中加载内容...

编辑:查看 Blue Host 是否在您的控制面板中允许停放域(又名 Masked Forward)。我想这就是你想要的。

【讨论】:

  • 嗯,这通常是一个不错的实用想法,但我不认为我会这样做。 :)
  • 往墙上扔东西... :)
猜你喜欢
  • 2010-11-21
  • 2013-06-11
  • 2010-12-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-10-28
  • 2013-09-20
  • 1970-01-01
相关资源
最近更新 更多