.htaccess 将规则重写到外部域 - 客户端 IP 和 HTTP referer

.htaccess rewrite rule to external domain - client IP and HTTP referer

假设我是 运行 一个位于 www.domain1.com

的网站

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

RewriteEngine On
RewriteBase /

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

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

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

在那个外部“domain2”的日志中,究竟会显示什么:

客户端 IP 是来自实际的客户端 Web 浏览器,还是来自我的 Web 服务器 运行 在“domain1”?
是否会有任何提示表明它是从我的“域 1”“重定向”而来的?例如,在“referer”字段中?

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

will the client IP be from the actual client web browser, or from my web server running at "domain"?

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

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

will there be any hints that it got "redirected" from my "domain1"? in the "referer" field, for example?

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

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

但是,如果用户从 another-domain.com 跟随 link 到 domain1.com(即 another-domain.comReferer)并且您发出“重定向”从 domain1.comdomain2.com 然后 浏览器 将传递 another-domain.com 作为 Referer (默认情况下)。

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

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

and will the web client will be notified about any "redirection" status code?

是的,这就是重定向。

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

  1. domain1.com 通过 Location HTTP 响应 header 将 3xx 重定向响应发送回客户端,告诉 URL 的客户端进行请求。

  2. 然后客户端浏览器向Locationheader.

    中声明的URL发出新的请求

RewriteEngine On
RewriteBase /

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

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