2015-04-09 4 views
0

Я использую подстановочный знак в конце моих объявлений Express-маршрута, чтобы проверить, не является ли соединение не HTTPS, а если нет, перенаправить на HTTPS-версию URI.Экспресс-переадресация SSL не работает для root/

Это работает на все, кроме root, то есть на www.domain.com. Это немного проблема, потому что domain.com обслуживает SPA.

app.get('*', function (req, res) { 
     if (req.headers['X-forwarded-proto'] != 'https') { 
      res.redirect('https://domain.com/#' + url_path); 
     } 
     else { 
      res.redirect('/#' + url_path); 
     } 
}); 

Я заметил, что этот фрагмент кода даже не вызывается, когда URL-адрес является корневым доменом. Я думаю, что это может быть потому, что я заявляю:

app.use(express.static(path.join(application_root, 'public')));

Это необходимо для SPA для обслуживания всех активов. Когда я удаляю эту строку, мой обработчик маршрута теперь вызывается для корневого домена, но моя домашняя страница теперь бесконечно перенаправляется.

+0

Вы используете обратный прокси-сервер, такой как Nginx? Не могли бы вы также включить конфигурацию вашего веб-сервера, чтобы мы могли проверить, как настроены заголовки запросов. –

+0

Я использую AWS Load Balancer, который на самом деле не имеет большой конфигурации. Я могу подтвердить, что X-forwarded-proto работает. – metalaureate

ответ

0

Мне пришлось создать собственный маршрут к серверу моего файла SPA, переименовать index.html, чтобы Express не пытался его обслуживать вместо моего маршрута.