这是我的设置。
- 我在域根文件夹 mydomain.com 上安装了 WordPress
- 我的 nodejs 服务器监听端口 3000 并安装在 mydomain.com/server/文件夹中
- 我无权使用虚拟主机或更改 Apache 配置
这是我的 .htaccess:
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteRule ^server/(.*)?$ http://127.0.0.1:3000/$1 [P,L]
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>
我仍然无法从浏览器访问我的 nodejs 服务器或从我的脚本(无论是 ajax 还是 socket.io)调用它
请如果有人能解决这个问题,我一直在尝试解决它但没有成功。
编辑:这是我的 server.js
var express = require('express');
var path = require('path');
var mysql = require('mysql');
var app = express();
var server = require('http').createServer(app);
var io = require('socket.io').listen(server);
var db = require('./db');
var operators = new Array;
// socket.io connection
io.on('connection', function(socket){
socket.emit('login', { operators: operators });
});
// Request chat button
app.get('/get_button/:key', function(req, res){
db.connect(function(err){ if (err){ throw err; } else { console.log('DB connected'); }});
db.query('select * from `wp_oboxchat_keys` where `key` = `' + req.params.key + '` limit 1', function(err, result) {
if (err) {
throw err;
} else {
res.sendFile(path.join(__dirname, '../', 'app/widget.html'));
console.log('DB successful query: get_button');
}
});
});
// Listen to server
server.listen(3000, function(){ console.log('Server started.'); });
服务器使用 node server.js 在我的控制台上运行时没有任何错误,但无法从网络浏览器访问它。
最佳答案
已解决。
在我的 server.js 中,我必须这样做:
var server = app.listen(3000);
var io = require('socket.io').listen(server);
然后在我的 .htaccess 中,我使用 mod 重写如下:(我的 nodeserver 位于相对于我的域根目录(安装 wordpress 的位置)的/server/目录中
RewriteEngine On
RewriteBase /
RewriteRule ^server/(.*)?$ http://127.0.0.1:3000/$1 [P,L]
就是这样。我希望这对遇到类似问题的任何人有所帮助。
关于node.js - 如何使用 .htaccess 在 Apache 后面运行我的 NodeJS 服务器?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48991981/