首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >强制特定页面使用带有angularjs的HTTPS

强制特定页面使用带有angularjs的HTTPS
EN

Stack Overflow用户
提问于 2014-03-27 21:46:04
回答 1查看 20.8K关注 0票数 18

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

然而,我们网站中的大多数导航都是通过相对urls和states完成的,在angularjs中使用ui-router,我们发现apache不会捕获这些请求,因此在没有SSL的情况下为页面提供服务。

例如,如果用户单击带有https的链接,Apache会加载模板并刷新状态--任何时候都不会向服务器发出新uri的请求,因此ui-router不能重定向到https

:有没有办法强制ui路由器(或一般的angular )强制某个状态使用,而不必更改所有链接来重新加载整个站点?

当然,这也可能是我们重写规则中的一个缺点……这是我们到目前为止所拥有的

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的情况下获取该州的支付模板。这样可以吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-04-14 12:51:06

我也遇到过类似的问题,尽管我在SPA应用程序中使用了$routeProvider。我所做的是在控制器中强制执行重定向:

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

不过,这确实会重新加载所有资源。但是,当切换到SSL模式时,这种情况只发生一次。

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

我希望这能帮到你。

票数 36
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/22689543

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档