HTAccess:将子域重定向到另一个协议

HTAccess:将子域重定向到另一个协议

我想为子域制定一个规则,这样我的teamspeak子域将直接重定向到ts3协议。

那么,让我向您展示一个例子:

RewriteCond %{HTTP_HOST} ^(ts\.)?example\.com$ [NC]
RewriteRule ^(.*)$ ts3://example.com/$1 [R=301,L]

不幸的是,这不起作用(导致无限循环)。

老实说,我对 .htaccess 没有任何经验。它应该是什么样子?尝试了一些其他示例,但大多数只是重写到目录或重定向到另一个域,所以我缺少示例......

是否有可能做我正在尝试的事情?

答案1

长话短说 .htaccess不是为此而设计的,并且 TS3 无法理解 Apache 的 HTTP 流量(由于许多与协议相关的原因)。最好的解决方案可能是创建ts.example.com一个别名example.com(在您域的 DNS 配置中),并要求您的客户端连接到您的 Teamspeak 连接端口所在的ts.example.com:x位置。x

.htaccess文件由 Apache Web 服务器使用。它是处理 HTTP 流量的系统的一部分。 Teamspeak 3 无法理解 HTTP 流量...因为它不是 HTTP 服务器。因此,使用文件将 HTTP 流量重定向到 TS3 .htaccess(假设这是正确的方法)没有多大意义:TS3 只会丢弃请求,因为它无法理解 HTTP 请求。

Teamspeak 服务与端口关联,而不是与地址关联。如果您使用netstat,您实际上将能够找到该端口。我对 Teamspeak 不太熟悉,但我听说过端口 9987 和 10011...您必须检查您的 TS3 配置:)

如果您想重定向从 到 的所有内容ts.example.comexample.com我建议您将域名配置为以这种方式工作。为指定ts.example.com一个别名example.com,所有发送到 的请求ts.example.com:9987都将到达example.com:9987。这种配置通常由您的权威名称服务器处理,您应该有权访问 DNS 区域管理才能应用更改。

现在,重定向全部特别是来自ts.example.com9987端口的流量更加复杂,而且也很适得其反。 Teamspeak 使用多个端口(查询、语音数据、文件传输...):如果您将所有内容发送到 9987,则它可能无法接收查询和文件传输,从而可能导致初始连接无法进行。此外,您的机器将无法区分来自 的流量ts.example.comexample.com因为客户端在解析名称后通过 IP 到达它。

HTTP 服务器(或者可能是代理)确实可以使用 HTTP 标头进行区分Host,但是这里需要处理许多与协议相关的问题:

  • HTTP 是基于连接的,流量必须从 TCP 传输到 UDP(你好头顶!)。
  • Host: 必须删除标头,以便仅保留 TS3 二进制数据。当然,混合文本和二进制数据是一个糟糕的主意。
  • 代理还必须能够区分语音数据与文件传输和 TS3 查询......而且我很确定这样的代理不存在。
  • ...

相关内容