如何使用 .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 和 ProxyPass
、ProxyPassReverse
指令在虚拟主机中设置适当)。
然后,在 .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]
我们有以下情况:
我们想设置域掩码以将项目平台的内容提供给最终用户。最终用户设置了从 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 fromplayer.domain-client.com.
toapp.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 和 ProxyPass
、ProxyPassReverse
指令在虚拟主机中设置适当)。
然后,在 .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]