一尘不染

强制特定页面将HTTPS与angularjs一起使用

angularjs

在我们的应用程序中,我们有一个要使用SSL的付款页面,因为我们正在处理信用卡信息。我们已经为apache制定了重写规则,以将对特定页面的请求重定向到HTTPS
-它处理对支付页面(http://oursite.com/pay)的任何直接请求。

但是,我们网站中的大多数导航都是通过相对URL并在angularjs中states使用ui- router而完成的,我们发现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即可获取该州的付款模板。这个可以吗?


阅读 313

收藏
2020-07-04

共1个答案

一尘不染

我有一个类似的问题,尽管在SPA应用程序中使用了$ routeProvider。我所做的是在控制器内部实施重定向:

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

尽管这确实会重新加载所有资源。但是,切换到SSL模式时只会发生一次。

注意,该函数实际上在服务中,因此可以在任何地方调用。

我希望这有帮助。

2020-07-04