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