在Apache之后运行Node.js,与PHP一起运行.htaccess配置

时间:2016-09-02 12:24:20

标签: node.js apache .htaccess proxy behind

我正在开发一个项目,其中网站内容基于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文件。

感谢任何帮助。

1 个答案:

答案 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>

希望这有帮助!