在我们的应用程序中,我们有一个支付页面,我们要使用SSL,因为我们正在处理信用卡信息。我们已经为apache制定了重写规则,将请求重定向到特定页面的HTTPS - 这会处理对付款页面的任何直接请求(http://oursite.com/pay)。
然而,我们网站中的大多数导航是通过相对网址和states
在angularjs中使用ui-router
完成的,我们发现apache不会捕获这些请求,因此无需SSL即可提供页面。
EX如果用户单击带有ui-sref='pay'
ui-router
的链接,则会加载模板并刷新状态 - 在任何时候都不会向服务器请求新的uri,因此apache可以' t重定向到https
有没有办法强制ui-router(或一般角度)强制状态使用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的情况下获取状态的付款模板。这没关系吗?
答案 0 :(得分:36)
虽然在SPA应用程序中使用了$ routeProvider,但我遇到了类似的问题。我所做的是在控制器内强制执行重定向:
var forceSSL = function () {
if ($location.protocol() !== 'https') {
$window.location.href = $location.absUrl().replace('http', 'https');
}
};
forceSSL();
这会重新加载所有资源。但是,切换到SSL模式时只会发生一次。
注意,该功能实际上是在服务中,因此可以从任何地方调用。
我希望这会有所帮助。