【问题标题】:Can one mimic a cross-domain mod-rewrite rule?可以模仿跨域的 mod-rewrite 规则吗?
【发布时间】:2017-08-18 11:07:54
【问题描述】:

考虑到 domain1.com 和 domain2.com 位于不同的主机上,是否可以模拟一个重写规则,这将使 //domain1.com/anypagename.php?key=value 重定向到 //domain1.com/anypagename.php?key=value?常规的 mod-rewrite 不允许这样做,但也许重写规则的组合使所有内容都指向同一个文件并让该文件转发它,可以模仿吗?

我之所以要这样做是因为 domain1 是一个大域的受信任的子域,所以我们想保留它以用于营销目的,但是我们无法更改 DNS 记录,并且关联的托管服务太糟糕了我们希望实际的网站在我们自己的服务器上运行(并且 domain2.com 是我们控制的常规域)。

使用 .htaccess、PHP 等的方法都很好,但重要的是,对 domain1 上的任意页面(带有任意 ?key=val&key2=val2 参数)的 GET 和 POST 请求都在 domain2 上正确处理并显示为它们实际上是 domain1 上的常规页面。

【问题讨论】:

  • 在 ISP 或主机服务器上的主机记录。如果在 ISP 我会询问为什么您无权修改它,如果在主机服务器上,请将网站移动到更好的主机。如果这也是不可能的,我也会查询。

标签: php apache .htaccess mod-rewrite cross-domain


【解决方案1】:

我还没有尝试过,但我想到了 P|proxy 标志

例如,如果您希望后端图像服务器处理所有图像请求,您可以执行以下操作:
...

在您的情况下,当 domain1.com 和 domain2.com 设置相同时,这可能是

RewriteRule ^ http://domain2.com%{REQUEST_URI} [P]

但也要注意

性能警告

使用此标志会触发 mod_proxy 的使用,而无需处理持久连接。这意味着如果您使用 ProxyPass 或 ProxyPassMatch 进行设置,您的代理的性能会更好


所以ProxyPass 可能是更好的选择

ProxyPass / http://domain2.com

但是这个也有一个缺点,你不能在 .htaccess 文件中使用它。这仅在您有权访问主或虚拟主机配置时才有效。

【讨论】:

  • 我正在努力让它工作。我的 .htaccess 文件有 RewriteEngine On 和 RewriteRule ^ http://domain2.com%{REQUEST_URI} [P] 行,但现在我得到“禁止您无权访问此服务器上的 /index.html”。 Apache/2.4.7 (Ubuntu) 服务器位于 domain1.com 端口 80'。但是,直接访问 domain1.com/index.html 可以。
  • (我应该注意触发了 .htaccess,因为删除它会显示 domain1 的 index.html 文件而不是此错误。)
  • 后期更正:我的第一条评论的最后一句话应该是:但是,直接访问“domain2.com/index.html”可以。
  • 正如我最后写的,ProxyPass 不能在 .htaccess 文件中使用。您必须将它放在主或虚拟主机配置中。
  • 奇怪,根据这个问题stackoverflow.com/q/34093167/1741542,这暗示缺少 mod_proxy。没关系,ProxyPass 无论如何都是首选解决方案。
猜你喜欢
  • 2011-07-20
  • 1970-01-01
  • 2011-08-14
  • 1970-01-01
  • 2015-09-22
  • 1970-01-01
  • 1970-01-01
  • 2013-01-13
  • 1970-01-01
相关资源
最近更新 更多