Запуск 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>
Надеюсь это поможет!