我正在开发一个项目,其中网站内容基于Apache服务器背后的PHP(CodeIgniter),我的职责是将node.js编写为即将推出的移动版应用程序的API。 (注意,我们的托管是托管的,我们无法访问virtualhost,因此使用proxypass是遥不可及的)
我必须让我的节点文件在Apache之后运行,例如" domainname / api"。 当调用所述URL时,Apache必须将此请求桥接到localhost:port,其中节点所在的端口。
这是我的node.js文件:
var fs = require('fs');
var http = require('http');
var app = require('express')();
var options = {
};
app.get('/', function (req, res) {
res.send('Hello World!');
});
http.createServer( app).listen(61000, function () {
console.log('Started!');
});
这是我的.htaccess文件:
RewriteEngine on
RewriteRule ^$ /index.php [L]
RewriteCond %{HTTP_HOST} !^ourdomainname\.com
RewriteRule (.*) http://ourdomainname.com/$1 [R=301,L]
RewriteCond $1 !^(index\.php|info.php|resource|system|user_guide|bootstrap|robots\.txt|favicon\.ico|google<somevalues>.html)
RewriteRule ^(.*)$ /index.php/$1 [L]
RewriteRule ^/api$ http://127.0.0.1:61000/ [P,L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^/api/(.*)$ http://127.0.0.1:61000/$1 [P,L]
虽然节点在本地工作(在我们的托管主机服务器上)(我可以调用&#34; lynx localhost:61000 /&#34;并查看正确的输出),但它不能在本地外部工作。我们打电话给&#34; ourdomainname.com:61000 / api&#34;被发送到CodeIgniter(PHP),而不是我们的node.js文件。
感谢任何帮助。
答案 0 :(得分:0)
我在运行Node.js和wordpress应用程序时遇到了类似的问题。根目录中的Wordpress和www.website.com/api
中的节点应用程序。这是我们的.htaccess
文件的副本。我们经历了很多努力。最终工作的(感谢stackoverflow的建议)是将/api
重定向移动到文件的顶部。你也不需要在目录api之前的初始'/'。
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteRule ^api/(.*)?$ http://127.0.0.1:51900/$1 [P,L]
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>
希望这有帮助!