socket.io忽略url路径似乎导致轮询GET 404错误

时间:2015-08-10 12:24:19

标签: node.js .htaccess url-rewriting socket.io subdirectory

我正在尝试使用node.jssocket.io运行聊天脚本。我已经关注the tutorial on the socket.io website并让它在我的本地Windows节点服务器http://localhost:3000上运行就好了。

现在我将项目转移到了一个使用port 54321的网络服务器。因为服务器正在运行Apache Web服务器,所以我需要使用.htaccess文件将请求重定向到node.js服务器:

RewriteEngine On
RewriteRule ^chat/(.*) http://localhost:54321/$1 [P]

所以我的聊天脚本可以在http://www.examle.com/chat/

找到

网站将在浏览器中打开,所有HTML都在那里。但是socket.io功能不起作用。控制台(浏览器,客户端)显示以下错误消息:

GET http://www.example.com/socket.io/?EIO=3&transport=polling&t=1439208895332-0 404 File not found

我在SO上看到过类似的问题,这些问题存在同样的问题。答案主要是关于服务器的index.js中变量的正确顺序。我确实试过这些解决方案,但他们没有帮助。因为脚本在我的本地服务器上工作(在url中没有任何子目录),我认为它可能是不同的东西。奇怪的是客户端socket.io脚本似乎忽略了请求中的子目录/chat/。如果我尝试使用/chat/手动打开GET请求中的网址,它会给我回复!

http://www.example.com/chat/socket.io/?EIO=3&transport=polling&t=1439208895332-0

这样可行!

但是如何让socket.io真正为其请求使用正确的路径/ url?

1 个答案:

答案 0 :(得分:3)

在客户端上,您可以将路径设置为选项:

var socket = io('http://example.com', {path: '/chat/socket.io'});