2016-09-02 2 views
1

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

Я должен сделать мой файл узла за Apache в URL, например, «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] 

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

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

ответ

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> 

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

Смежные вопросы