【问题标题】:.htaccess rewrite rule to external domain - client IP and HTTP referer.htaccess 重写规则到外部域 - 客户端 IP 和 HTTP 引用
【发布时间】:2023-04-06 16:15:01
【问题描述】:

假设我在 www.domain1.com 上运行一个网站

在“.htaccess”中,我重定向到外部“domain2”,如下所示:

RewriteEngine On
RewriteBase /

RewriteRule ^mydirectory/(.*)$ http://www.domain2.com/mydirectory/$1 [NC,L]

请注意,在 RewriteRule 中,我没有传递标志 [R][R=301]

现在我从网络浏览器打开http://www.domain1.com/mydirectory/

在该外部“domain2”的日志中,究竟会显示为:

  • 客户端 IP
  • HTTP 引荐来源网址(referer)

客户端 IP 是来自实际的客户端网络浏览器,还是来自我在“domain1”上运行的网络服务器?
会有任何暗示它从我的“domain1”“重定向”吗?例如在“referer”字段中?

Web 客户端是否会收到任何“重定向”状态代码的通知?

【问题讨论】:

  • 您为什么不自己尝试一下并找出答案?
  • @arkascha:因为我是初学者。因为我没有两个域。即使我在本地进行了测试,我也不知道“一般”的行为如何 - 使用不同的 Web 服务器。这就是为什么我要问这个概念应该如何按照标准工作。最后,因为 SO 是用来提问的。

标签: .htaccess redirect url-rewriting


【解决方案1】:

客户端 IP 是来自实际的客户端网络浏览器,还是来自我在“域”上运行的网络服务器?

“实际的客户端网络浏览器”。 (或者,当客户端向domain2.com 发出请求时,通常会报告任何 IP,因为它们可能通过代理服务器、VPN 等进行连接。)

来自domain1.com 的重定向响应是客户端向domain2.com 发出全新请求的指令。

是否有任何提示表明它是从我的“domain1”“重定向”的?例如在“referer”字段中?

如果您在用户第一次到达domain1.com 时立即进行重定向,则不会。通常,浏览器会保留来自先前“非重定向”请求的Referer 标头。重定向本身不会生成Referer

因此,如果您向domain1.com 发出直接请求(即没有Referer),那么在重定向的请求中不会将Referer 传递给domain2.com

但是,如果用户点击了从 another-domain.comdomain1.com 的链接(即,another-domain.comReferer)并且您发出从 domain1.comdomain2.com 的“重定向”,那么 browser 会将another-domain.com 作为Referer 传递(默认情况下)。

如果您允许用户在重定向到domain2.com 之前浏览domain1.com 一段时间(从一个页面导航到另一个页面 - 这自然会生成一个Referer),那么domain1.com 可能会被视为客户端向domain2.com 发出请求时的Referer。至少,默认情况下,这可以通过在引用站点上设置 Referrer-Policy(在现代浏览器中)来覆盖。

当然,用户可能已经将他们的浏览器配置为禁止Referer,并且原始网站(例如another-domain.comdomain1.com)也可以通过设置Referrer-Policy来禁止发送Referer在现代浏览器中。旧浏览器(例如 IE11)不支持此功能,因此您只能任由浏览器使用的任何默认值摆布。

Web 客户端是否会收到任何“重定向”状态代码的通知?

是的,这就是重定向。

如果domain1.com 重定向到domain2.com 那么...

  1. domain1.com 向客户端发送一个 3xx 重定向响应,其中包含一个 Location HTTP 响应标头,告诉客户端请求的 URL。

  2. 然后,客户端的浏览器向 Location 标头中所述的 URL 发出新请求。


RewriteEngine On
RewriteBase /

RewriteRule ^mydirectory/(.*)$ http://www.domain2.com/mydirectory/$1 [NC,L]

请注意,即使未明确说明状态代码(RR=301),这也会生成 302(临时)重定向。 (RewriteBase 指令在这里完全是多余的。)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-06-11
    • 2010-09-26
    • 2011-11-21
    • 2012-07-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-08-12
    相关资源
    最近更新 更多