Javascript 强制特定页面与angularjs一起使用HTTPS
在我们的应用程序中,我们有一个要使用SSL的支付页面,因为我们正在处理信用卡信息。我们已经为apache制定了重写规则,将特定页面的请求重定向到HTTPS——这将处理任何直接请求到支付页面() 然而,我们站点中的大多数导航都是通过相对URL完成的,并且在angularjs中使用Javascript 强制特定页面与angularjs一起使用HTTPS,javascript,angularjs,.htaccess,mod-rewrite,ssl,Javascript,Angularjs,.htaccess,Mod Rewrite,Ssl,在我们的应用程序中,我们有一个要使用SSL的支付页面,因为我们正在处理信用卡信息。我们已经为apache制定了重写规则,将特定页面的请求重定向到HTTPS——这将处理任何直接请求到支付页面() 然而,我们站点中的大多数导航都是通过相对URL完成的,并且在angularjs中使用状态,我们发现apache无法捕获这些请求,因此在没有SSL的情况下为页面提供服务 例如,如果用户单击带有ui-sref='pay'ui-router的链接,则加载模板并刷新状态——在任何情况下都不会向服务器请求新的uri
状态
,我们发现apache无法捕获这些请求,因此在没有SSL的情况下为页面提供服务
例如,如果用户单击带有
ui-sref='pay'
ui-router
的链接,则加载模板并刷新状态——在任何情况下都不会向服务器请求新的uri,因此apache无法重定向到https
有没有一种方法可以强制用户界面路由器(或一般的角度路由器)强制某个状态使用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]
第二套规则是为我们的应用程序强制执行HTML5模式
RewriteCond%{REQUEST\u FILENAME}-f
已就位,因此angular可以在不需要SSL的情况下获取状态的支付模板。这样可以吗?我遇到了类似的问题,尽管我在SPA应用程序中使用了$routeProvider。我所做的是在控制器内部强制执行重定向:
var forceSSL = function () {
if ($location.protocol() !== 'https') {
$window.location.href = $location.absUrl().replace('http', 'https');
}
};
forceSSL();
但这确实会重新加载所有资源。但是,当切换到SSL模式时,这种情况只发生一次
注意,该函数实际上在服务中,因此可以从任何地方调用
我希望这能有所帮助。是的,它看起来不错。但我也需要一个强制使用https客户端的解决方案!您所说的强制使用https客户端是什么意思?您想通过JS而不是.htaccess来执行此操作吗?如果用户单击带有
ui sref='pay'
ui-router
的链接,则加载模板并刷新状态——在任何情况下都不会向服务器请求新的uri,因此apache无法重定向到https。重写规则涵盖人们直接访问domain.com/pay
的情况,但不包括ui路由器处理导航的情况。我需要将pay
状态下的ui路由器重定向到https。要么这样做,要么把所有链接都链接到/pay
绝对hrefs
,我不想这样做。我们最终用SSL实现了整个站点,并在htaccess中使用了重写规则,但这是可行的!谢谢replace('http','https')
-我建议谨慎使用,因为URL中可能多次出现'http'字符串。实际上,在这种特殊情况下,replace只会在第一次出现'http'时发生。要在全局范围内实现,一种方法是$location.absUrl().replace(/http/g,'https');干得好!只是做了一些小的语法修正。