我们有以下情况:
我们希望设置域掩码,以便从项目平台向最终用户提供内容。最终用户已设置从player.domain-client.com.
到app.domainA.com
的CNAME
记录
现在,当最终用户输入https://player.domain-client.com/5432
时,他应该获取https://app.domainA.com/player/?=5432
的内容。 但网址应保持https://player.domain-client.com/5432
. 仅当客户端子域包含player
时,才应应用此屏蔽。
任何人都可以指出我如何设置.htaccess
的正确方向,以便它进行正确的屏蔽吗?
最终用户已设置从
player.domain-client.com.
到app.domainA.com
的CNAME
记录
据推测,"项目平台"也已配置为接受player.domain-client.com
的请求?
在这种情况下,它应该只是一个简单的内部重写(在同一主机上(的问题。虽然,如果您通常会在app.domainA.com
处请求相同的 URL 路径,即。app.domainA.com/5432
,那么没有什么需要做的,因为重写已经到位了?否则,请尝试以下操作:
RewriteEngine On
# Rewrite any request for /<number> to player/?=<number>
RewriteCond %{HTTP_HOST} ^player. [NC]
RewriteRule ^(d+)$ player/?=$1 [L]
但是,/player/?=5432
不是实际的端点,因为这需要系统进一步重写才能"工作"。也许你的意思是像/player/index.php?=5432
?(查询字符串也有点奇怪,因为缺少参数名称?如前所述,这可能需要手动解析查询字符串以提取值?
条件(RewriteCond
指令(确保仅重写对player
子域的请求。
在WordPress上,您需要确保这些指令在WP前端控制器之前。在# 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=$1 [P]