У меня есть приложение PlayFramework, разработанное с использованием Scala, работающего на Heroku; Я упоминаю только язык разработки и фреймворк, потому что все сообщения, которые я нашел по этой проблеме, относятся к PHP! У меня есть http и https, запущенные в личном домене, но я хотел бы заставить HTTP-запросы перенаправляться на https.
Я обнаружил, что мне нужно обновить файл .htaccess следующим образом:
##Force SSL
#Normal way (in case you need to deploy to NON-heroku)
RewriteCond %{HTTPS} !=on
#Heroku way
RewriteCond %{HTTP:X-Forwarded-Proto} !https
#If neither above conditions are met, redirect to https
RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
Но я не уверен, возможно ли это и как настроить файл .htaccess с помощью Play и Scala.
Пожалуйста, кто-нибудь посоветует? Спасибо.
Все, что вам нужно сделать, это добавить
play.filters.enabled += play.filters.https.RedirectHttpsFilter
В вашем файле .conf
.
Он автоматически перенаправит все HTTP-запросы на HTTPS.
По умолчанию он работает только в режиме production
. Чтобы изменить это, добавьте:
play.filters.https.redirectEnabled = true
См. RedirectHttpsFilter документация для получения дополнительной информации.
Поскольку переход от STAGING к PROD просто копирует развернутый артефакт, я не могу использовать другой файл .conf для каждой среды, который решил бы эту проблему.
Вы можете использовать другой файл .conf
. Создайте файл с именем Procfile
после playframework.com/documentation/2.6.x/…. Затем установите в него -Dconfig.resource=yourFile.conf
. Вместо этого Heroku будет использовать этот файл .conf
.
Procfile встроен в развернутый артефакт. Развернутый артефакт просто копируется из STAGING в PROD (без изменений, то есть в тот же файл Procfile) при использовании конвейера развертывания. Поэтому у меня не может быть разных Procfiles.
Вы можете использовать переменную среды для хранения имени файла conf. Как -Dconfig.resource=$CONFIG_FILE
, а затем heroku config:set CONFIG_FILE = "yourFile.conf"
в каждом env. Или вы можете поместить env var в конфигурацию: play.filters.https.redirectEnabled = ${REDIRECT_ENABLED}
Это не совсем сработало, как ожидалось. Я использую конвейер развертывания на Heroku, нажимая на восходящий мастер, нажимая на STAGING (только нормальный домен herokuapp.com указывал на тот, который уже является https). Затем я перехожу от STAGING к PROD после тестирования в STAGING. Вышеупомянутый фильтр выдает ошибку
.herokuapp.com redirected you too many times
при попытке попасть по STAGING url.