我想为子域制定一个规则,这样我的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.com
,example.com
我建议您将域名配置为以这种方式工作。为指定ts.example.com
一个别名example.com
,所有发送到 的请求ts.example.com:9987
都将到达example.com:9987
。这种配置通常由您的权威名称服务器处理,您应该有权访问 DNS 区域管理才能应用更改。
现在,重定向全部特别是来自ts.example.com
9987端口的流量更加复杂,而且也很适得其反。 Teamspeak 使用多个端口(查询、语音数据、文件传输...):如果您将所有内容发送到 9987,则它可能无法接收查询和文件传输,从而可能导致初始连接无法进行。此外,您的机器将无法区分来自 的流量ts.example.com
,example.com
因为客户端在解析名称后通过 IP 到达它。
HTTP 服务器(或者可能是代理)确实可以使用 HTTP 标头进行区分Host
,但是这里需要处理许多与协议相关的问题:
- HTTP 是基于连接的,流量必须从 TCP 传输到 UDP(你好头顶!)。
Host:
必须删除标头,以便仅保留 TS3 二进制数据。当然,混合文本和二进制数据是一个糟糕的主意。- 代理还必须能够区分语音数据与文件传输和 TS3 查询......而且我很确定这样的代理不存在。
- ...