Подтвердить что ты не робот

Принуждение конкретной страницы для использования HTTPS с угловыми

В нашем приложении у нас есть страница оплаты, на которую мы хотим использовать SSL, потому что мы обрабатываем информацию о кредитной карте. Мы уже внедрили правила перезаписи для apache, чтобы перенаправить запрос на конкретную страницу на HTTPS, - который заботится о любых прямых запросах к странице платежа (http://oursite.com/pay).

Однако большинство навигации на нашем сайте выполняется с помощью относительных URL-адресов и states с помощью ui-router в angularjs, и мы обнаружили, что apache не улавливает эти запросы и поэтому служит страница без SSL.

EX Если пользователь нажимает ссылку с ui-sref='pay' ui-router, загружает шаблон и обновляет состояние - ни в коем случае не является запросом, сделанным сервером для нового uri, поэтому apache не может перенаправить на https

Есть ли способ заставить ui-router (или angular в целом) заставить государство использовать HTTPS без необходимости менять все ссылки для перезагрузки всего сайта?

Конечно, это также может быть недостатком в наших правилах перезаписи... Вот что мы до сих пор

RewriteEngine on
RewriteCond %{HTTPS} !=on
RewriteCond %{REQUEST_URI} /pay
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
RewriteCond %{REQUEST_FILENAME} -f [OR]
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule ^ - [L]
RewriteRule ^ index.html [L]

Второй набор правил - принудительное применение html5mode для нашего приложения.

RewriteCond %{REQUEST_FILENAME} !-f на месте, чтобы angular мог получить шаблон оплаты для состояния без необходимости использования SSL. Это нормально?

4b9b3361

Ответ 1

У меня была аналогичная проблема, хотя я использовал $routeProvider в приложении SPA. Я сделал, чтобы обеспечить перенаправление внутри контроллера:

var forceSSL = function () {
    if ($location.protocol() !== 'https') {
        $window.location.href = $location.absUrl().replace('http', 'https');
    }
};
forceSSL();

Это, однако, перезагружает все ресурсы. Однако это происходит только один раз при переключении в режим SSL.

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

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