Запуск Node.js за Apache, настройка.htaccess вместе с PHP

Я работаю над проектом, в котором контент сайта основан на PHP(CodeIgniter) за сервером Apache, и моя обязанность - написать node.js в качестве API для будущей мобильной версии приложения. (Обратите внимание, что наш хостинг управляется, у нас нет доступа к virtualhost, поэтому использование proxypass недоступно)

Я должен сделать так, чтобы мой файл узла работал за Apache, в URL-адресе, подобном "domainname/api". Когда вызывается указанный URL-адрес, Apache должен соединить этот запрос с портом localhost:, где находится узел.

Вот мой файл 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]

Хотя узел работает локально (на нашем сервере управляемого хостинга) (я могу назвать "lynx localhost:61000/" и вижу правильный вывод), он не работает вне локальной сети. Все наши вызовы "ourdomainname.com:61000/api" отправляются в CodeIgniter(PHP), а не в наш файл node.js.

Любая помощь приветствуется.

1 ответ

У меня была похожая проблема с запуском Node.js вместе с приложением WordPress. WordPress в корне, и приложение узла в www.website.com/api, Вот копия нашего .htaccess файл. Мы много с этим боролись. Что в итоге сработало (благодаря предложению на stackru), так это переместить /api перенаправить в начало файла. Вам также не нужны начальные символы '/' перед 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>

Надеюсь это поможет!

Другие вопросы по тегам