如何使用 .htaccess 屏蔽域?

How can I mask a domain using .htaccess?

我们有以下情况:

我们想设置域掩码以将项目平台的内容提供给最终用户。最终用户设置了从 player.domain-client.com.app.domainA.com

CNAME 记录

现在当最终用户输入 https://player.domain-client.com/5432 时,他应该得到 https://app.domainA.com/player/?=5432 的内容。 但是 URL 应该保持 https://player.domain-client.com/5432。 只有在客户端子域包含 player.

时才应应用此屏蔽

任何人都可以指出如何设置 .htaccess 以使其进行正确屏蔽的正确方向吗?

The end user has setup a CNAME record from player.domain-client.com. to app.domainA.com

大概“项目平台”也已配置为接受对 player.domain-client.com 的请求?

在这种情况下,应该只是简单的内部重写(在同一台主机上)。虽然,如果您通常会在 app.domainA.com 处请求相同的 URL-path,即。 app.domainA.com/5432,那么重写已经到位,您无需执行任何操作?否则,请尝试以下操作:

RewriteEngine On

# Rewrite any request for /<number> to player/?=<number>
RewriteCond %{HTTP_HOST} ^player\. [NC]
RewriteRule ^(\d+)$ player/?= [L]

但是,/player/?=5432 不是实际的端点,因为这需要系统进一步重写才能“工作”。也许您的意思是 /player/index.php?=5432? (查询字符串也有点奇怪,因为您缺少参数 name?正如所写,这可能需要手动解析查询字符串以提取值?)

条件(RewriteCond 指令)确保只重写对 player 子域的请求。

在 WordPress 上,您需要确保这些指令 WP 前端控制器之前。 IE。在 # BEGIN WordPress 部分之前。 .htaccess 中指令的顺序很重要。

但是,如果这一切都由 WordPress 管理,那么您不能简单地在 .htaccess 中创建重写,因为 WordPress 仍然看到请求的原始 URL,而不是重写的 URL。因此,除非所请求的 URL 在 WordPress 本身中作为有效路由存在,否则您可能会得到 404。这种重写需要在 WordPress 本身内部进行管理。

使用反向代理的替代解决方案

另一种方法是将您的服务器配置为 反向代理 并将请求从 https://player.domain-client.com/1234 代理到 https://app.domainA.com/player/?vid=1234(在评论中提到)。理想情况下,这需要访问主服务器配置才能正确配置(需要 mod_proxy 和 ProxyPassProxyPassReverse 指令在虚拟主机中设置适当)。

然后,在 .htaccess 中,您可以改为使用 RewriteRule 上的 P 标志:

# Proxy any request for /<number> to player/?=<number>
# for the "player" subdomain only.
RewriteCond %{HTTP_HOST} ^player\. [NC]
RewriteRule ^(\d+)$ https://app.domainA.com/player/?vid= [P]